File.Replace бросает IOException

У меня есть приложение, которое может изменять изображения. В некоторых случаях это уменьшает размер файла, в некоторых случаях увеличивает его.

В программе нет опции «не заменять файл, если результат имеет больший размер».

Поэтому я написал небольшое приложение на C#, чтобы попытаться решить эту проблему.

Вместо того, чтобы перезаписывать файлы, я заставляю приложение записывать результат в папку под текущей и называть эту папку Test.

Приложение C#, которое я написал, сравнивает содержимое обеих папок и помещает полный путь к файлу (файлам) в два объекта List. Потом сравниваю и заменяю.

Однако замена не работает. Я получаю следующее исключение IOException:

Невозможно удалить файл для замены

Местоположение находится на внешнем жестком диске, на который у меня есть полные права.

Теперь я знаю, что могу просто выполнить File.Delete и File.Move в таком порядке, но это исключение заставило меня задуматься, почему эта конкретная установка не будет работать.

Вот исходный код: http://pastebin.com/4Vq82Umu

И да, файл, указанный в качестве последнего аргумента функции замены, существует.


person KdgDev    schedule 05.04.2010    source источник


Ответы (1)


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

попробуйте использовать оператор using для автоматического удаления ресурса,

согласно документации:

Если местонахождениеBackupFileName находится на другом диске, оно не удаляется, как указано в документации, вместо этого выдается исключение IOException с сообщением «Невозможно удалить файл, подлежащий замене». бросают

http://msdn.microsoft.com/en-us/library/9d9h163f.aspx

person Oscar Cabrero    schedule 05.04.2010
comment
Я просмотрел классы, которые использую, и ни один из них не наследуется от IDisposable. Как мне реализовать использование в этом? - person KdgDev; 06.04.2010
comment
Если у вас есть FileStream, открытый для файла, он реализует IDisposable. - person Eric J.; 01.03.2012