| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Как скопировать занятый фаил |
| Автор: ddll 21.6.2011, 15:51 |
| Копирую один фаил (офисовский документ) с одной директори в другую. В этот момент файл открыт другой програмой и выскакивает ошибка невозможно скопровать фаил занят другим процесом. я использую просто File.Copy(s1, s2, true); Я понимаю что можно отлавливать exeptions но это для меня плохо тк с файлом человек может работать с файлом целый день. Задача скопировать этот занятый фаил пусть даже непоследнюю версию. Всем заранее спасибо за помошь и ответы! |
| Автор: YurIOs 29.6.2011, 00:10 | ||
Можно побайтно скопировать файл с помощью подклассов Stream. Для создания считывающего потока нужно использовать перегруженный метод File.Open() который позволяет открыть файл занятый другим процессом, для этого нужно использовать значение ReadWrite перечисления FileShare
Но при этом нет гарантии что тот другой процесс не начал запись в файл, или уже ее полностью завершил, поэтому копия может быть поврежденной. Для файлов малых размеров метод подойдет, так как скорость копирования где-то 1 Мб/секунду. Есть идея как ускорить, завтра попробую реализовать. |
| Автор: YurIOs 29.6.2011, 15:36 | ||
| А вот и обещанный мной метод по шустрее.Ускорение достигаться за счет буфера. При размере буфера в 1024 байт, скорость копирования файла больше 4 Гб на моем РС составляет 39 Мб/секунду.
Здесь также используется перегруженный метод File.Open() с использованием перечисления FileShare.ReadWrite |