File.Copy之谜
Posted
技术标签:
【中文标题】File.Copy之谜【英文标题】:File.Copy mystery 【发布时间】:2018-03-13 17:59:36 【问题描述】:我有如下代码(其实是分了各种方法,不过是这样的):
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)
有什么想法吗?
【问题讨论】:
TheSrcFileName
和 TheDestFileName
的值是多少?
您的代码对我来说可以正常工作,即使c:\users...\dunsany
中有三个点也是如此。请分享足够的信息,以便我们重现该问题。
如果TheSubDirPath
已经作为目录以外的东西存在怎么办?
TheSrcFileName 是 "C:\Users\MyName\Documents\Test01\filename.ext"
TheDestFileName 是 C:\Users\MyName\Documents\Test01\subdirname\anotherfilename.ext"
【参考方案1】:
将 if 条件替换为:
if (Directory.Exists(TheSubDirPath))
Directory.Delete(TheSubDirPath, true);
【讨论】:
【参考方案2】:可能会出现以下情况
调用 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()
【讨论】:
这似乎已经解决了!非常感谢你们!'while (Directory.Exists(TheSubPath))Directory.Delete(TheSubPath.true);Thread.Sleep(1000);以上是关于File.Copy之谜的主要内容,如果未能解决你的问题,请参考以下文章
File.Copy() 到具有网络凭据的文件服务器 [重复]
File.Copy() 到具有网络凭据的文件服务器 [重复]
从 xml 文件复制数据并粘贴到同一文件中并使用 FIle.Copy() 覆盖
File.Copy() 从网络共享到同一台机器上的另一个共享是不是通过网络复制文件?