2015-03-31 84 views
1

使用System.IO,我嘗試下面的代碼:Directory.GetFiles改變路徑字符串

string[] files = Directory.GetFiles("\\folder\\folder_2\\folder_3"); 

,並得到了以下異常:

「System.IO.DirectoryNotFoundException - 這是不可能的找到部分路徑'C:\ folder \ folder_2 \ folder_3'''

我不知道爲什麼「c:\」被添加到原始字符串中,而且我似乎無法保留從做的方法如此。我究竟做錯了什麼?

任何幫助,非常感謝。

+0

\發現充分說明表示「回去根」。刪除第一個\如果你想要一個相對路徑。 – Blorgbeard 2015-03-31 21:11:17

+1

'string [] files = Directory.GetFiles(@「folder \ folder_2 \ folder_3」);' – 2015-03-31 21:12:33

+1

您是否期待相對於原始UNC路徑的currnet位置的路徑(例如'\\ SERVER \ SHARE \ folder_1 \ folder_2') – 2015-03-31 21:25:33

回答

1

你需要逃避每個反斜槓開始您的路徑中,你才躲過了一個單斜槓。請使用正確的轉義:

string[] files = Directory.GetFiles("\\\\folder\\folder_2\\folder_3"); 

或者你可以使用一個逐字字符串:

string[] files = Directory.GetFiles(@"\\folder\folder_2\folder_3"); 

在路徑開始在MSDN Documentation

3

路徑開始處的反斜槓(\)使其成爲絕對路徑。刪除第一個\如果你想有一個相對路徑:

string[] files = Directory.GetFiles("folder\\folder_2\\folder_3"); 
1

除了答案提供,你可以使用逐字字符串,這將通過字符串完全不需要所有的雜亂反斜槓逃逸。

在你的情況,這將是

string[] files = Directory.GetFiles(@"folder\folder_2\folder_3"); 

注意,@是報價之外,但是粘在打開引號,這告訴C#從字面上使用它,(原諒雙關語)。這種字符串的語法高亮顯示也將在Visual Studio中更改,僅供參考。

編輯:看到另一個用戶的評論,建議您使用@,這是同樣的事情。對不起,沒有看到這一點。

Read about them here at MSDN

+1

它被稱爲「逐字串字面量」,而不是常規字符串文字(不帶@)。此外,你留下了主要的反斜線:) – Blorgbeard 2015-03-31 21:40:39