Создано событие в System.IO.FileSystemWatcher - PullRequest
1 голос
/ 24 августа 2011

У меня есть папка. Когда файл скопирован в эту папку, мне нужно переименовать его. Следовательно, я использовал System.IO.FileSystemWatcher, чтобы сделать это. И я реализовал сервис для этого.

Мой код выглядит следующим образом.

private System.IO.FileSystemWatcher FSWatcherTest;

FSWatcherTest.Created += new FileSystemEventHandler(FSWatcherTest_Created);

--------

private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
{
    //Some code
    File.Move(oldfilepath, newfilepath);
    //some code
}

Когда я копирую текстовый файл с локального компьютера, он работает нормально. Но когда я копирую большой файл из сети, это не работает. Ошибка, когда это копирование, это будет запущено. Таким образом, файл не доступен для этого метода. Но я задаюсь вопросом, почему это происходит, когда это происходит.

Я использую VS 2008 и C# для этого приложения.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Только что нашел этот фрагмент

        Dim F As Short = FreeFile()
        FileOpen(F, sFile, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
        FileClose(F)

Можно ли обернуть его в цикл "WHILE", чтобы он ожидал, пока процесс копирования свободен?

0 голосов
/ 24 августа 2011

Хакерское решение:

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

Примерно так:

private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
{
    FileMover(object sender, System.IO.FileSystemEventArgs e);
}

private void FileMover(object sender, System.IO.FileSystemEventArgs e)
{
    try{
    //Some code
    File.Move(oldfilepath, newfilepath);
    //some code
    }
    catch
    {
         //Call an asynchronous method that will wait 1 second then call FileMover again       
         //with the same arguments,
         //a BackGroundWorker would be perfect for that job.
    }
}
...