Как скопировать файл, который используется - PullRequest
3 голосов
/ 01 августа 2011

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

Я использую эту библиотеку http://ftplib.codeplex.com/, чтобы открыть сеанс ftp на сервере и отправить файл. В этом есть немного переименования, но это все.

К сожалению, файл журнала, который нужно отправить, фактически открыт, поэтому я получил исключение «файл используется другим процессом». Это имеет смысл, когда я думаю об этом, поскольку журнал открыт во время работы моего приложения. Я закрыл его, но, конечно, загрузка - это долгий процесс. Я поместил код загрузки в фоновый поток, чтобы пользователь мог продолжить. Однако журнал не может быть повторно открыт до завершения загрузки. Тем временем может быть какое-то событие, которое должно быть записано в журнал.

Так что я ищу способ скопировать журнал и затем загрузить его. Каков был бы лучший способ сделать это? Журнал представляет собой двоичный файл. Кстати.

1 Ответ

3 голосов
/ 01 августа 2011

Если у вас нет кода, у которого открыт файл журнала (т. Е. Это другое приложение или dll с закрытым исходным кодом), вы можете попробовать выполнить File.Copy(<log>, <tempdest>) и отправить этот файл, удалив его, когда вы закончите. , Это иногда работает, если у вас нет прав на чтение файла.

Если вы в первую очередь владеете кодом, который обращается к файлу, вы хотите открыть его с явным ShareMode, т.е.

 File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)
...