复制目录

时间:2016-12-22 22:23:32

标签: c# io

所以,我有一些看起来如下的逻辑:

private static void CopyToDestDirectory(string destDirectory, string srcDirectory)
{
    if (!Directory.Exists(destDirectory))
    {
        Directory.CreateDirectory(destDirectory);
    }
    foreach (var file in Directory.GetFiles(srcDirectory))
    {
        var filename = Path.GetFileName(file);
        var destPath = Path.Combine(destDirectory, filename);
        File.Copy(file, destPath, true);
    }

    ...
}

通常这有效,但每隔一段时间就没有。对于它不起作用的时间,我有一个类似于以下内容的日志文件:

2016-12-22 15:49:21,670 [11] ERROR:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\destPath\FileName.ext'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
   at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
   at Namespace.Class.CopyToDestDirectory(String destDirectory, String srcDirectory)
   at Namespace.Class.CallingMethod()

我不知道为什么我会收到目标路径的异常。这对我没有意义,因为我确保在复制之前重新创建目标目录。

这就是调用方法的样子。值得注意的是,它在调用CopyToDestDirectory之前删除了目录。我不希望这是一个问题因为,我只是重新创建它的目录,因为这和CopyToDestDirectory是同步的,但老实说,我不熟悉System.IO功能背后的所有低级细节,所以我认为值得一提。

public void CallingMethod()
{
    try
    {
        ...

        if (Directory.Exists(destDirectory))
        {
            Directory.Delete(destDirectory, true);
        }
        string srcDirectory = GetSrcDirectory();
        CopyToDestDirectory(destDirectory, srcDirectory);

        ...
    }
    catch (Exception ex)
    {
        _log.Error("", ex);
        throw;
    }
}

什么可能导致这样的错误?

1 个答案:

答案 0 :(得分:0)

在创建SymLinks / Junctions以更新目录内容之前,我有一个类似PowerShell的案例。

作为解决方法:我最终编写了一个循环,删除/创建目录,当它存在/不存在时。我想写一个日志,用于循环情况,但是因为它在第一次工作时发生了变化。奇怪的是,也许错误是在代码周围,但我没有重现它。也许足以第二次调用Directory.Exists()。