[英]How can I move my files from my directory to another directory without getting an exception
[英]Unable to move a directory from one location to another without an exception error
嘗試將文件夾從C:\\ Program Files \\ mycompany \\ myapp移至用戶appData文件夾時遇到一個奇怪的問題。 所有文件夾路徑似乎都很好(如messagebox.show中所示),但是仍然發生異常錯誤,並指出路徑存在問題。
代碼如下:
將VS媒體文件夾從C:\\ Program Files \\ mycompany \\ myapp \\ VS媒體應用程序文件夾移動到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(字符串路徑,布爾NeedFullPath)
在System.Security.Util.StringExpressionSet.CreateListFromExpressions(String [] str,布爾NeedFullPath)
在System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess訪問,AccessControlActions控件,String [] pathListOrig,布爾checkForDuplicates,布爾needFullPath,布爾copyPathList)處
在System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess訪問,String [] pathListOrig,布爾值checkForDuplicates,布爾值needFullPath,布爾值copyPathList)
在System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess訪問,String [] pathList,布爾值checkForDuplicates,布爾值needFullPath)
在System.IO.File.InternalCopy處(字符串sourceFileName,字符串destFileName,布爾覆蓋)
然后它會驗證異常發生后路徑仍然正確。 無法將C:\\ Program Files \\ mycompany \\ myApp \\ VS Media \\移動到目標C:\\ Users \\ VS-VM \\ AppData \\ Local \\ mycompany \\ VS Media \\
所以我不確定什么是錯的?
在msdn Directory.GetFiles中
返回指定目錄中的文件名( 包括其路徑 )。
所以這個
File.Copy(vsMediaFolder + files[i], vsMediaPath + files[i]);
你必須使用
File.Copy(files[i], vsMediaPath + Path.GetFileName(files[i]));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.