【发布时间】: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返回文件的完整路径,而不仅仅是文件名 -
第一行代码中的字符串没有双引号。我想这不是它在您的程序中的实际外观......
-
我没有正确复制,原代码中有引号。