无法将目录从一个位置移动到另一个位置而不会出现异常错误

时间:2013-11-28 06:43:37

标签: c# .net

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

代码如下:

将VS媒体文件夹从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:不支持给定路径的格式。

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

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

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

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

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

at 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 \

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

1 个答案:

答案 0 :(得分:0)

msdn Directory.GetFiles

中的

  

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

所以改为

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

你必须使用

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