File.Replace бросает IOException - PullRequest
       9

File.Replace бросает IOException

3 голосов
/ 06 апреля 2010

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

Программа не имеет возможности «не заменять файл, если результат имеет больший размер файла».

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

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 06 апреля 2010

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

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

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

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

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

...