Закройте все дескрипторы открытых файлов с помощью C # - PullRequest
2 голосов
/ 20 января 2011

У меня есть набор интеграционных / регрессионных тестов, который я построил поверх SpecFlow (который использует NUnit внизу). У меня проблема в том, что иногда в тесте возникает исключение, и файл может оставаться открытым. Это проблема в последующих тестах, потому что они не могут читать / записывать в этот файл.

Есть ли способ определить, какие файлы открыты у процесса, а затем закрыть их все?

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Вы должны поместить ваши файлы в блоки using, чтобы они закрывались, даже если выдается исключение.

1 голос
/ 20 января 2011

Вы должны закрыть дескрипторы, выбрасывая их (лучше всего делать с предложением using) или ждать финализатора. Финализаторы, вероятно, не будут работать на вас, так как они могут не работать до следующего теста. Так что избавление от них с помощью try ... finally или using - это путь.

Хотя вы можете перечислять маркеры и закрывать их, вы не должны. С тех пор дескриптор может быть закрыт дважды, что приведет к неопределенному поведению и сбоям.

Вот пример кода, перечисляющий все дескрипторы процесса: http://nopaste.info/58d1aed48f.html Вы можете отфильтровать их только по дескрипторам файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...