System.IO.DirectoryNotFoundException by File.Move

本文关键字:File Move by DirectoryNotFoundException IO System | 更新日期: 2023-09-27 18:05:27

我希望有一个简短的问题:当我使用文件。移动它会给我一个错误:

System.IO.DirectoryNotFoundException was unhandled by user code
  Message=Could not find a part of the path.
  Source=mscorlib
  StackTrace:
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.__Error.WinIOError()
       at System.IO.File.Move(String sourceFileName, String destFileName)
       at Portal_2_Level_Installer.Form1.WorkMagic(String FileLocation) in C:'Users'Yoshie'Local Settings'Documents'Visual Studio 2010'Projects'Portal 2 Level Installer'Portal 2 Level Installer'Form1.cs:line 265
  InnerException: 
我代码:

File.Move(FileLocation, destinationPath);

和变量的内容:

destinationPath="c:/program files (x86)/steam''steamapps''common''portal 2''Test''Test.docx"
FileLocation="C:''Users''Yoshie''Local Settings''Documents''Test.docx"

谢谢!编辑:我现在真的觉得自己像个白痴。我没有意识到目标文件夹必须存在!我愚蠢地认为,如果目标文件夹不存在,就会自动创建它。很抱歉浪费了你的时间,但是无论如何还是要感谢你的回答!(我现在知道我可以使用@来停止转义,所以知道这个很好)无论如何,谢谢你,再一次,对不起!

System.IO.DirectoryNotFoundException by File.Move

请使用'而不是/以及使用@,如@"path"。

这有什么区别吗?

destinationPath=@"c:'program files (x86)'steam'steamapps'common'portal 2'Test'Test.docx";
FileLocation=@"C:'Users'Yoshie'Local Settings'Documents'Test.docx";

您的目标文件路径应该像这样

destinationPath="c:''program files (x86)''steam''steamapps''common''portal 2''Test''Test.docx"

我在做文件时也被这个TargetInvocationException捕获。删除并没有注意到确保目录存在的内部消息。

这是由于我从发布切换到调试,我没有创建一组包含要删除的文件的相对子文件夹。

在我的情况下(WinForm . net Framework 4.7.2),使用File.Move的路径长于MAX_PATH(约260个字符)似乎也会触发此异常。

因此,在传递到File.Move之前,我用长路径语法添加了我使用的路径,并且它有效。

// Prepend long file path support
if( !packageFile.StartsWith( @"''?'" ) )
    packageFile = @"''?'" + packageFile;

看:如何处理文件名长于259个字符的文件?