File.Copy之谜

时间:2017-10-02 16:04:40

标签: c# file-io

我有以下代码(实际上分为不同的方法,但这就是它的意思):

string ThePath = FBD.SelectedPath; // FBD is a FolderBrowserDialog.
string TheSubDirPath = Path.Combine(ThePath, TheSubDirName);
if (Directory.Exists(TheSubDirPath)) {      Directory.Delete(TheSubDirPath, true); } // Want a clean, empty directory.
Directory.CreateDirectory(TheSubDirPath);
string TheSrcFileName = Path.Combine(ThePath, MyOldFileName);
string TheDestFileName = Path.Combine(TheSubDirPath, MyNewFileName);
File.Copy(TheSrcFileName, TheDestFileName, false); // Overwriting is impossible, so not needed.

最后一行导致带有消息

的DirectoryNotFoundException
  

无法找到路径'C:\ Users ... \ Test01 \ TheSubDirName \ MyNewFileName'的一部分。“

源路径和目标路径都是我想要的路径。 我在目录删除后和目录创建后尝试插入延迟,无效。我有一个堆栈跟踪,显示问题的核心

  

在       System.IO.Error.WinIOError(Int32 errorCode,String maybeFullPath)

     

在       System.IO.File.InternalCopy(String sourceFileName,String destFileName,Boolean overwrite,Boolean checkHost)

     

在       System.IO.File.Copy(String sourceFileName,String destFileName,Boolean overwrite)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

可能存在某种情况  调用方法Directory.Delete(TheSubDirPath, true)的结果可能会将文件夹保留为'以便删除'。因此,您可能在创建新文件夹后删除了文件夹。尝试更改声明

if (Directory.Exists(TheSubDirPath))
        Directory.Delete(TheSubDirPath, true);

while(Directory.Exists(TheSubDirPath))
{
    Directory.Delete(TheSubDirPath, true);
    Sleep(); //Somehow like Thread.Sleep()
}

答案 1 :(得分:0)

将条件替换为:

if (Directory.Exists(TheSubDirPath))
    Directory.Delete(TheSubDirPath, true);