Directory.EnumerateFiles
을 사용할 때 파일이나 디렉토리를 삭제하거나 옮기는 것이 안전합니까? 이 같은파일 시스템을 열거하는 동안 삭제하거나 이동해도 안전한가요?
뭔가 : 나는 일반적으로, 당신은 당신이 열거하는지 수정 안된다, 알고
foreach (var fileName in Directory.EnumerateFiles("Sub"))
File.Delete(fileName);
. 그러나 파일 시스템은 위의 코드가 작동하기 때문에 규칙을 따르지 않는 것 같습니다.
EnumerateDirectories
과 EnumerateFileSystemEntries
에 동일한 질문이 적용되고 DirectoryInfo
클래스의 동일한 방법이 적용됩니다.
관련 항목 : [반복 중에 디렉토리 내용이 변경되면 Directory.EnumerateFiles는 어떻게됩니까?] (http://stackoverflow.com/questions/29555761/what-happens-with-directory-enumeratefiles-if-directory-content-changes) -during-i) – stuartd
당신이 말하는 규칙은'foreach'에서 기본 컬렉션을 수정하는데 적용됩니다. 왜냐하면 'IEnumerator'를 무효로 할 것이기 때문입니다. 이 경우 기본 데이터는 컬렉션에 없지만 전달되는 파일 이름 스트림과 같습니다. 양자 택일로'GetFiles'를 사용했다면, 기본 콜렉션은 배열입니다. 그러나 당신은 삭제 된 배열을 수정하지 않을 것입니다. – juharr
열거 중 목록에서 개체를 삭제하거나 이동하면 목록을 뒤로 이동해야합니다 (i = length - 1, i> = 0, i--). 문제는 색인 생성이 엉망인 항목을 제거 할 때입니다. 항목 2를 제거하면 항목 3이 2가되고 열거에서 항목 3을 건너 뜁니다. – jdweng