簡體   English   中英

無法將目錄從一個位置移動到另一位置而沒有異常錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM