我在尝试将文件夹从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 \
所以我不确定是什么问题?
答案 0 :(得分:0)
返回指定目录中文件的名称(包括其路径)。
所以改为
File.Copy(vsMediaFolder + files[i], vsMediaPath + files[i]);
你必须使用
File.Copy(files[i], vsMediaPath + Path.GetFileName(files[i]));