2013-09-26 4 views
3

Я прочитал много других сообщений по этой теме, но никто, кажется, не решает мою проблему напрямую (что меня удивляет).C# Скопируйте файл, который набирается

Независимо ... Я написал парсер журнала и очень просто хочу скопировать файл с удаленной машины локально, прежде чем разбирать его. Файл, который я пытаюсь скопировать, записывается постоянно, и у меня есть «случайный» успех при его копировании. Иногда это будет работать, и в других случаях я получаю сообщение об отказе в доступе или ошибке FileAccess. Несколько моментов:

  • Всякий раз, когда я использую Windows Explorer, чтобы скопировать файл локально, я никогда не
    есть проблема копирования его (что заставляет меня верить, что это совершенно
    можно скопировать файл 100% от время).
  • Я всегда могу открыть файл с помощью текстового редактора в его удалении.
  • Я не являюсь владельцем файла, который записывается и не хочет его «блокировать», так что приложение, которое на самом деле записывает этот файл, терпит неудачу.

У кого-нибудь есть предложения по копированию этого файла?

Текущая команда, я использую это:

File.Copy(this.txt_log_file_to_analyze.Text, sLogFileToAnalyze,true); 
+0

Отладка примеров значения this.txt_log_file_to_analyze.Text поможет нам выяснить, как именно вы получаете доступ к этой машине удаленно (привязанный к ОС диск, FTP и т. Д.) –

+3

Вы пробовали 'новый FileStream (путь к файлу, FileMode. Open, FileAccess.Read, FileShare.Read) 'таким образом вы обязательно откроете его только в режиме чтения? Вы могли бы записать его в поток памяти или сохранить его в файл и т. Д. – derape

+1

Что относительно размера файла это очень большой? –

ответ

7

Я думаю, вы должны будете открыть файл с помощью:

File.Open(this.txt_log_file_to_analyze.Text,FileMode.Open,FileAccess.Read,FileShare.ReadWrite) 

, а затем скопировать содержимое файла «вручную» т.е.

using (var from = File.Open("path", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var to = File.OpenWrite("to_path")) 
{ 
    from.CopyTo(to); 
} 

или если .NET 4.5 см How do I copy the contents of one stream to another?

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

+0

Это именно то, что я говорю –

+0

GREAT !!!. Два вопроса. Что произойдет, если удаленный файл продолжит писать, пока я запускаю эти инструкции? Сработают ли команды? Если файл существует локально, могу ли я перезаписать? – user2786756

+0

Будет ли команда закончена? Я понятия не имею - никогда не пробовал это раньше. Перезаписать файл? В текущем файле File.OpenWrite он откроет существующий файл, не уверен, будет ли он добавляться или перезаписываться, но с использованием File.Open для «to» у вас снова будет намного больше контроля. – Rudi

Смежные вопросы