2014-02-15 387 views
11

我在c#中進行編程,並希望從子文件夾中將一個文件夾從一個閃存盤複製到啓動。「找不到路徑的一部分」錯誤信息

這裏是我的代碼:

private void copyBat() 
    { 
     try 
     { 
      string source_dir = "E:\\Debug\\VipBat"; 
      string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"; 

      if (!System.IO.Directory.Exists(destination_dir)) 
      { 
       System.IO.Directory.CreateDirectory(destination_dir); 
      } 



      // Create subdirectory structure in destination  
      foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories)) 
      { 
       Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length)); 

      } 

      foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories)) 
      { 
       File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true); 
      } 
     } 

     catch (Exception e) 
     { 
      MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 

    }   

我得到了一個錯誤:

Could not find a part of the path E:\Debug\VipBat

謝謝您的幫助....

+0

爲什麼「{0}」? – Ofiris

+2

您正在使用逐字字符串'@「」',在這種情況下,您不需要退出'\\' - 只需使用一個斜槓即可。 – StuartLC

+0

@StuartLC是對的。如果你使用_verbatim字符串literal_,你的字符串將和你寫的一樣。在這種情況下,它將完全是E:\\ Debug \\ VipBat \\,這不是有效的路徑。 –

回答

16

的錯誤是自我解釋。您嘗試訪問的路徑不存在。

string source_dir = "E:\\Debug\\VipBat\\{0}"; 

我確定這不是正確的路徑。 Debug文件夾中直接在E:驅動器看起來不對我。我想必須有項目名稱文件夾目錄。

第二件事;什麼是你的字符串中的{0}。我相信它是一個參數佔位符,因爲文件夾名稱不能包含{0}這樣的名字。所以你需要使用String.Format()來代替實際值。

string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName); 

但首先檢查您嘗試訪問的路徑存在。

5

有什麼問題。你寫:

string source_dir = @"E:\\Debug\\VipBat\\{0}"; 

和錯誤是

Could not find a part of the path E\Debug\VCCSBat

這是不一樣的目錄。

在代碼中有一個問題,你必須使用:

string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @ 

string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\ 
+0

我刪除了{0}和@。但是,我得到同樣的錯誤... – user3313131

1

File.Copy(FILE_NAME,destination_dir + file_name.Substring(source_dir.Length),真) ;

此行有錯誤,因爲代碼預期的是目錄名+文件名,而不是文件名。

這是正確的

File.Copy(source_dir + FILE_NAME,destination_dir + file_name.Substring(source_dir.Length),TRUE);

4

驅動器E是映射驅動器嗎?然後,它可以由用戶帳戶以外的其他帳戶創建。這可能是錯誤的原因。

+0

這是否與特權有關?有趣的是,我以管理員身份打開Visual Studio,代碼停止工作,抱怨「無法找到路徑的一部分」。這沒有任何意義。 – Kafo

1

可能不相關,但考慮使用Path.Combine而不是destination_dir + dir.Substring(...)。從它的外觀來看,你的.Substring()會在開始時留下一個間隙,但像Path這樣的輔助類是有原因的。

2

我有同樣的錯誤,雖然在我的情況下問題是與DESTINATION路徑的格式。上面的註釋在調試路徑字符串格式時是正確的,但似乎在File.Copy異常報告中存在一個錯誤,它仍然返回SOURCE路徑而不是DESTINATION路徑。所以不要忘了在這裏看看。

-TC

1

我只需重新啓動Visual Studio中的管理權限解決類似的問題。

問題是因爲無法打開一個與Sharepoint相關的項目而沒有提升訪問權限。

1

可以有兩個原因這個錯誤之一:

  1. 路徑是不正確的 - 但它是不太可能的,除非路徑本身是無效的CreateDirectory應該創建任何路徑,讀無效字符
  2. 通過其運行應用程序的帳戶沒有權限在路徑位置創建目錄,例如,如果您嘗試在沒有足夠權限的共享驅動器上創建目錄等。
+0

在我的情況下,我沒有擁有的網絡文件夾上的安全設置沒有給服務用戶足夠的權限,因此它可以訪問該文件。如果錯誤信息包含_why_訪問失敗,而不是讓我們猜測,那會非常好。該例外甚至沒有內部例外來協助調試。 – Suncat2000

相關問題