Особенности чтения директории в Windows

System.IO.IOException: The process cannot access the file '....' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.AddSearchableDirsToStack(SearchData localSearchData)
at System.IO.FileSystemEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption)
а что вы хотите? пропуск исключения в стиле сишечки с записью в сислог ? =)
Чтобы чтение списка файлов в директории не приводило к ошибке "файл занят", например.
попробовал повторить на досуге - не получилось. сорри хз что там =) у меня в тесте файлик был залочен на содержимое.
В любом случае функцию "получить хоть какието файлы" от фс написать можно и с мистическими ошибками фс. например EnumerateFiles вернет хрень, которая по идее продолжит энумератор и после пойманного исключения.
У меня тулза работает в сборке, при этом сборка распаралеленная. Я эту ошибку видел ровно один раз, событие как я понимаю очень маловероятное, но возможное.

Дело в том, что этого исключения в нормальной фс и нормальной ос вообще не может возникнуть, потому что создание элемента в содержимом директории - операция атомарная. open(O_EXCL) либо создаст файл, либо скажет что его нетон уже есть, третьего не дано. Прочитанный список файлов понятно может устареть, но это принципиально неизбежно, если только не лочить директорию явно. Как я понимаю, этого не происходит, иначе бы это было в документации.

Edited at 2014-08-09 07:21 pm (UTC)
удачи искать атомарности в файловых системах. буду рад об этом почитать =)
мы хотим (и да, используем) нормальные ОС, где такой хуйни не может быть в принципе.

такие дела.