File.Exists返回true但复制找到的文件失败

时间:2017-11-24 14:29:19

标签: c#

我有以下几行代码:

protected void MoveFilesToInBound(string filePath, string fileName, DateTime? reportingRun)
{
    var dateValue = reportingRun.Value.ToString("yyyyMMdd");
    var file = fileName + "_" + dateValue + ".csv";

    if (File.Exists(Path.Combine(filePath, file)))
    {
        File.Copy(file, InputFolder);
    }
}

单步执行我的代码,我可以看到我的目标文件位于目标文件位置。但是,当它将我的文件复制到我的输入文件夹(这是正确的)时,它无法告诉我:Could not find file 'myFile_20170831.csv'

令我困惑的是,我不明白为什么会失败。如果文件不在那里,肯定它甚至不会到达它引发错误的File.Copy行。

有人可以对此有所了解吗?我有双倍和三倍检查我的所有位置,他们确实匹配。我只是不明白为什么文件不能从我的第一个位置复制到第二个位置。

2 个答案:

答案 0 :(得分:7)

嗯,你没有使用相同的路径......:

if (File.Exists(Path.Combine(filePath, file)))
{
    File.Copy(file, InputFolder);
}
希望

Path.Combine(filePath, file)file不同。你不是故意使用:

if (File.Exists(Path.Combine(filePath, file)))
{
    File.Copy(Path.Combine(filePath, file), InputFolder);
}

我说“希望”因为,如果file是完整路径(“C:\ ..”),Path.Combine将返回file而不是组合。

此外,为了获得一些性能,您应该使用:

string filePath = Path.Combine(filePath, file);
if (File.Exists(filePath))
{
    File.Copy(filePath, InputFolder);
}

答案 1 :(得分:2)

您正在检查是否存在Path.Combine(filePath, file),然后您尝试复制file(不带路径)。尝试:

string fileWithPAth = Path.Combine(filePath, file);

if (File.Exists(fileWithPAth))
{
  File.Copy(fileWithPAth , InputFolder);
}