【问题标题】:Unable to move a directory from one location to another without an exception error无法将目录从一个位置移动到另一个位置而不会出现异常错误
【发布时间】:2013-12-14 02:15:02
【问题描述】:

我在尝试将文件夹从 C:\Program Files\mycompany\myapp 移动到用户 appData 文件夹时遇到了一个奇怪的问题。所有文件夹路径似乎都很好(如 messagebox.show 所示),但异常错误仍然发生,表明路径存在问题。

代码如下:

将 VS Media 文件夹从 C:\Program Files\mycompany\myapp\VS Media Application 文件夹移动到 userPath

string userPath = C:\Users\VS-VM\AppData\Local\mycompany\VS Media\        
string vsMediaFolder = Path.GetDirectoryName(Context.Parameters["AssemblyPath"].ToString()) + @"\VS Media\";
string vsMediaPath = UserPath + @"VS Media\";

    MessageBox.Show("Source VS Media Folder " + vsMediaFolder +  " target VS MediaPath " + vsMediaPath);  //all these paths are correct as expected

        try
        {
            if (Directory.Exists(vsMediaPath))
            {
                // MessageBox.Show("VS Media exists - deleting");
                Directory.Delete(vsMediaPath, true);
            }


              Directory.Move(vsMediaFolder, vsMediaPath); 

        }
        catch (Exception e)
        {
            MessageBox.Show (e.ToString());
            MessageBox.Show("Unable to move " + vsMediaFolder + " to Destination " + vsMediaPath  ); 
         } 

这给出了一个关于路径未满的异常错误 - 但是如果我只使用使用 VsMediaPath = userPath(没有 @"VS 媒体),它会将文件从源 vsMediaFolder 直接复制到 userPath 文件夹中而不会出错。

这显示了源和目标的正确路径。

我还尝试进行文件复制而不是移动,但也出现错误。 它在 userPath 中创建了正确的文件夹,但是一旦它尝试复制我得到的文件 再次出现关于路径的异常错误(如下)。

            Directory.CreateDirectory(vsMediaPath);
            string[] files = Directory.GetFiles(vsMediaFolder);
            for (int i = 0; i < files.Length; i++)
                File.Copy(vsMediaFolder + files[i], vsMediaPath + files[i]);
            Directory.Delete(vsMediaFolder);

System.NotSupportedException: 给定路径的格式不受支持。

在 System.Security.Util.StringExpressionSet.CanonicalizePath(String path, Boolean needFullPath)

在 System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath)

在 System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess 访问,AccessControlActions 控制,String[] pathListOrig,布尔 checkForDuplicates,布尔需要FullPath,布尔 copyPathList)

at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)

在 System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)

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

然后它验证异常发生后路径仍然正确。 无法将 C:\Program Files\mycompany\myApp\VS Media\ 移动到目标 C:\Users\VS-VM\AppData\Local\mycompany\VS Media\

所以我不确定是什么问题?

【问题讨论】:

  • 你能提供vsMediaPath的值吗?
  • Directory.GetFiles 返回文件的完整路径,而不仅仅是文件名
  • 第一行代码中的字符串没有双引号。我想这不是它在您的程序中的实际外观......
  • 我没有正确复制,原代码中有引号。

标签: c# .net


【解决方案1】:

在 msdn Directory.GetFiles

返回指定目录中的文件名(包括它们的路径)。

所以改为这个

File.Copy(vsMediaFolder + files[i], vsMediaPath + files[i]);

你必须使用

File.Copy(files[i], vsMediaPath + Path.GetFileName(files[i]));

【讨论】:

  • 是的。这解决了这个问题。谢谢。我在另一篇文章中看到了这段代码,但没有意识到完整的路径名包含在文件名中(我应该知道)。
猜你喜欢
  • 2011-06-19
  • 2011-11-13
  • 1970-01-01
  • 2012-09-29
  • 2017-10-19
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多