FileSystemWatcher & Network
От: godwizard Россия  
Дата: 30.07.04 15:15
Оценка:
Есть проблема: Сделал виндовый сервис, который проверяет некую структуру папок локально и на CreateFile должен этот файл переименовать.
Пишу так


System.IO.File.Move(sourcePath, fullDistPath);


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

The process cannot access the file "D:\blabla\blabla\blabla\blabla\ДККД -1ЗН-ПС 20048301835610.DOC" because it is being used by another process.

Исходный файл ДККД -1ЗН-ПС.DOC
Переименованный файл ДККД -1ЗН-ПС 20048301835610.DOC


Помогите разобраться пожалуйста.
Best regards
Re: FileSystemWatcher & Network
От: Banch  
Дата: 31.07.04 11:20
Оценка:
Здравствуйте, godwizard, Вы писали:

G>The process cannot access the file "D:\blabla\blabla\blabla\blabla\ДККД -1ЗН-ПС 20048301835610.DOC" because it is being used by another process.


на локумльном диске скорее всего файл успевает создасться и ты его спокойно переименовываешь, а на сетевом все идет дольше и к моменту переименования он еще не дописан
попробуй подожать в цикле и пробовать переименовывать
Re[2]: FileSystemWatcher & Network
От: godwizard Россия  
Дата: 03.08.04 06:15
Оценка:
Здравствуйте, Banch, Вы писали:

B>Здравствуйте, godwizard, Вы писали:


G>>The process cannot access the file "D:\blabla\blabla\blabla\blabla\ДККД -1ЗН-ПС 20048301835610.DOC" because it is being used by another process.


B>на локумльном диске скорее всего файл успевает создасться и ты его спокойно переименовываешь, а на сетевом все идет дольше и к моменту переименования он еще не дописан

B>попробуй подожать в цикле и пробовать переименовывать

Ну в принципе я так и сделал. Сначала вызвал FileInfo и увидел, что length нулевая. Затем решил написать циклическую функцию


private void FileMove(string _source, string _target)
{
  try
  {
    System.IO.File.Move(_source, _target);
  }
  catch(System.IO.IOException ioex)
  {
    Thread.Sleep(5000);
    FileMove(_source, _target);
  }
}


Может кому и пригодится. У меня работа и с сетью и с веб-папками. Метод работает как часы.
Best regards
Re[3]: FileSystemWatcher & Network
От: Banch  
Дата: 03.08.04 08:26
Оценка:
Здравствуйте, godwizard, Вы писали:

G>
G>private void FileMove(string _source, string _target)
G>{
G>  try
G>  {
G>    System.IO.File.Move(_source, _target);
G>  }
G>  catch(System.IO.IOException ioex)
G>  {
G>    Thread.Sleep(5000);
G>    FileMove(_source, _target);
G>  }
G>}
G>

только лучше это в цикле делать, а не рекурсивно ...
Re[4]: FileSystemWatcher & Network
От: godwizard Россия  
Дата: 03.08.04 08:46
Оценка:
Здравствуйте, Banch, Вы писали:

B>Здравствуйте, godwizard, Вы писали:


G>>
G>>private void FileMove(string _source, string _target)
G>>{
G>>  try
G>>  {
G>>    System.IO.File.Move(_source, _target);
G>>  }
G>>  catch(System.IO.IOException ioex)
G>>  {
G>>    Thread.Sleep(5000);
G>>    FileMove(_source, _target);
G>>  }
G>>}
G>>

B>только лучше это в цикле делать, а не рекурсивно ...

А что будет в цикле условием выхода?
Best regards
Re[5]: FileSystemWatcher & Network
От: Andrbig  
Дата: 03.08.04 09:26
Оценка:
Здравствуйте, godwizard, Вы писали:

G>А что будет в цикле условием выхода?


Да то же самое, что и в рекурсии (в данном случае — exception), только память на стек жраться не будет.
Re[5]: FileSystemWatcher & Network
От: zubok32  
Дата: 03.08.04 09:30
Оценка: -1
Здравствуйте, godwizard, Вы писали:

G>А что будет в цикле условием выхода?



Может так?


for(;;)
{
    try
    {
        File.Move(oldName, newName);    
        break;
    }
    catch(FileNotFoundException){break;}
    catch{Thread.Sleep(5000);}
}


Regards
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.