2015-11-20 1 views
0

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

У меня уже есть специальная регистрация для файла, который копируется в сеть, которую я хочу сохранить.

В любом случае я могу добавить еще одну конкретную проверку, если файл заблокирован, и я могу его игнорировать и перейти на следующий, а продолжить обработку файлов?

public List<string> ProcessFiles() 
{ 
    string[] fileEntries = Directory.GetFiles(this.SourceLocation); 
    List<string> processedFiles = new List<string>(); 

    foreach (string sourceFile in fileEntries) 
    { 
     //Verify the destination path exists and attempt move 
     if (Directory.Exists(destinationPath)) 
     { 
      try 
      { 
       //Move the file to destination 
       File.Move(sourceFile, destinationFile); 
      } 
      catch(System.InvalidOperationException io) 
      { 
       //File is still being copied to the network, wait and try again 
       System.Threading.Thread.Sleep(500); 
       File.Move(sourceFile, destinationFile); 
      } 
      processedFiles.Add(fileNameNoPath); 
     } 

    } 
    return processedFiles; 
} 
+0

Вместо проверки, если он заблокирован, вы можете просто игнорировать любые ошибки, которые появляются во время копирования файлов (но журнал курса/показать их). Это простой 'try/catch (исключение)' внутри 'foreach'. Как вы уже делаете, но без второй попытки (что может «бросить» кстати и спать. 'обработанFiles.Add' должен находиться внутри' try' (после 'File.Move'), поэтому он будет только помнить успешно перемещенные файлы. Текущий код предполагает, что второй «File.Move» всегда успешный, и я сомневаюсь. * Операция Retry * обычно организована с помощью Queue и количества attemps. – Sinatr

+0

Спасибо за помощь Sinatr – John

+0

Спасибо за помощь Henk – John

ответ

1

Вы можете упростить try/catch блок:

try 
{ 
    File.Move(sourceFile, destinationFile); 
    processedFiles.Add(fileNameNoPath); 
} 
catch (System.IO.IOException e) 
{ 
    return; 
} 
+0

no @henk, имя 'io', используемое op confused me ... – tezzo

+0

Спасибо за помощь tezzo – John

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