Процесс не может получить доступ к файлу, потому что он используется другим процессом - PullRequest
3 голосов
/ 28 сентября 2010

У меня есть tif-файлы из определенного каталога, у меня есть функция, чтобы прочитать все tif-файлы и преобразовать их в текст, после преобразования я перемещаю их в папку с именем «Completed» после успешного преобразования, ипереместить папку Failed, если ее не удалось преобразовать.Проблема заключается в том, что когда я использовал метод Move System.IO.File, возникла ошибка, сообщающая, что

«Процесс не может получить доступ к файлу, поскольку он используется другим процессом»

В чем проблема, я закрыл файл, удаляю его, но все равно ошибка возникает?

Ответы [ 4 ]

1 голос
/ 12 октября 2010

У меня была такая проблема, и проблема заключалась в том, что я не смог удалить исходный файл, если создал его с помощью метода «FromFile» класса Image. Вместо этого я создал его с помощью метода «FromStream» (в конце убедитесь, что он был закрыт и утилизирован).

Я изменил свой код, чтобы он работал как метод № 3 здесь: http://dotnetguts.blogspot.com/2009/07/process-cannot-access-file-because-it.html

1 голос
/ 28 сентября 2010

Обязательно закройте файл, а также все, что с ним связано, во время обработки.

(поскольку вы решили не показывать нам код, мы на самом деле не знаем, что было создано во время обработки.)

Ищите такие вещи, как MemoryStreams, файлы MemoryMapped, изображения с файлами, дескрипторы файлов, хранящиеся в контейнере или IEnumerable, и т. Д.

У вас есть правильная идея, убедившись, что вы явно .Close() знаете ссылки и избавляетесь от объектов, но что-то все еще удерживает файл.

0 голосов
/ 28 сентября 2010

Убедитесь, что вы закрыли StreamReader, StreamWriter и любые другие процессы, которые работают с файлом, прежде чем выполнять с ним другую операцию.Например, если вы читаете с StreamReader и вам нужно записать в файл, закройте StreamReader и затем запустите StreamWriter.

В качестве альтернативы вы можете использовать Filestream, и я слышал, что в .NET Framework 4.0 они вводили асинхронные операции с файлами.

0 голосов
/ 28 сентября 2010

Перед переездом убедитесь, что процесс конверсии полностью завершен. Иногда кажется, что процесс завершен, а на самом деле это не так.

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