代码之家  ›  专栏  ›  技术社区  ›  Rainhider

FileInfo找到文件,但file.Copy找不到该文件

  •  0
  • Rainhider  · 技术社区  · 11 年前

    我正试图找到一个具有上次写入日期的文件,并将其复制到其他位置。它能正确地找到文件,但当我试图复制它时,它找不到刚找到的文件。这是在SSIS脚本任务中。

    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);
            }
        }   
    }
    
    3 回复  |  直到 11 年前
        1
  •  4
  •   Arian Motamedi    11 年前

    FileInfo.ToString() 返回文件的名称,但为了复制它,您需要完整的路径。改变

    file = latestFile.ToString();
    

    file = latestFile.FullName;
    

    给它一次机会。

        2
  •  2
  •   usr    11 年前

    什么是 latestFile.ToString() 评估为?这是一种奇怪的获取路径的方式。

    使用 FileInfo.FullName 正如文档所示。

    您可以使用调试器自己查找此类错误。

        3
  •  2
  •   D Stanley John Koerner    11 年前

    您可能需要构建完整的路径,而不是使用 Fileinfo.ToString() :

    file = latestFile.FullName; 
    

    从…起 MSDN :

    在某些情况下,ToString方法返回的字符串并不表示完全限定的路径。例如,当使用GetFiles方法创建FileInfo对象时,ToString方法并不表示完全限定的路径。