2013-09-04 4 views
0

Я пытаюсь найти файл с последней датой записи и скопировать его в другое место. Он находит файл правильно, но когда я пытаюсь его скопировать, он не может найти найденный файл. Это задача сценария SSIS.FileInfo находит файл, но File.Copy не может найти файл

DirectoryInfo directory = new DirectoryInfo(@"path"); 
FileInfo[] files = directory.GetFiles(); 

//files that have been written to in the last 3 days 
DateTime lastWrite = DateTime.Now.AddDays(-3); 

foreach (FileInfo latestFile in files) 
{ 
    // if its the correct name 
    if (latestFile.Name.StartsWith("OMC")) 
    { 
     // if its in the last 3 days 
     if (latestFile.LastWriteTime > lastWrite) 
     {  
      lastWrite = latestFile.LastWriteTime; 

      // this correctly find the file and puts it into the file variable. 
      file = latestFile.ToString(); 

      // this errors out saying it cannot find the file. 
      // (Does not even go to the outputFile) 
      File.Copy(file, outputFile, true); // <- error 

      //backs the file up 
      File.Copy(file, backupfile, true); 
     } 
    } 
} 
+2

Когда вы устанавливаете точку останова, имеет ли файл 'file' полный путь к файлу? – PoweredByOrange

+0

Это не то, что он спросил. –

+0

просто используйте имя, указанное в toString, и не голосуйте за всех голосов! –

ответ

3

FileInfo.ToString() возвращает имя файла, но для его копирования вам нужен полный путь. Изменение

file = latestFile.ToString(); 

Для

file = latestFile.FullName; 

И дать ему шанс.

+0

Спасибо! Это работает! – Rainhider

2

Что оценивает latestFile.ToString()? Это странный способ получить путь.

Использовать FileInfo.FullName, как указано в документах.

Вы можете использовать отладчик, чтобы найти такие ошибки самостоятельно.

+2

Предполагается, что ниспадающие строки должны быть объяснены без подсказки. – usr

+0

Не более, чем комментарий. – I4V

+4

Не знаете, почему вы так думаете. Я вызываю проблему и показываю решение. Что вы скажете об этом? – usr

2

Вы, возможно, потребуется построить полный путь вместо использования Fileinfo.ToString():

file = latestFile.FullName; 

От MSDN:

бывают случаи, когда строка, возвращаемая методом ToString не представляют полностью квалифицированное дорожка. Например, при создании объекта FileInfo с использованием метода GetFiles метод ToString не представляет собой полный путь.