2015-08-15 19 views
-1

我有一個接受用戶輸入並執行的東西文件的應用程序。用戶選擇一個文件,它可能會移動它,刪除它,重命名它,ftp等。應用程序使用一個散列表來存儲最近使用過的文件及其路徑。File.Exist返回true,當路徑有多個反斜線

我期待到現在的主要問題是加載項中的一個保存路徑不正確,它是將其保存爲這樣:C:\大衛\\ FILE.TXT

應用程序的一部分處理文件IO嘗試通過File.Exists(path)調用確保文件存在之前做東西。即使對於上述示例,此調用仍然返回true。任何人都可以解釋爲什麼這可能是?

我現在面臨的問題是,除了一個模塊保存路徑不正確,與該文件交互某些模塊正在接受不正確的路徑和做工精細而其他人看到它和崩潰。雖然目前我將通過正確保存路徑來解決這個問題,但我想了解這裏發生了什麼。

+3

爲什麼你考慮的路徑'C:\大衛\ File.txt'是「不正確」?其次,我們不能說「File.Exists」是否報告了正確的結果,因爲我們不知道你的情況是否實際存在。 – stakx

+0

我同意,關於這條路徑沒有任何「格式不正確」...... –

+0

@stakx,我們可以安全地假設'File.Exists'報告「正確」的結果。否則,成千上萬的開發者可能會從太空中聽到尖叫聲。 (...把我的腦袋伸出窗外......聽着......不,聽不到任何東西......):-b – elgonzo

回答

1

你有一個錯誤的前提:即C:\David\\File.txt是一個無效的路徑。 Windows中可以接受多個反斜槓。在命令提示符下嘗試notepad C:\David\\File.txt作爲一個實驗 - 它應該工作。

欲瞭解更多信息,請參閱本other SO q/a,它重申這一點。任何數量的反斜槓都很好,這可以用作組合路徑的「簡單」方式,而不用擔心反斜槓的數量。例如,用戶可以提供C:\DavidC:\David\,您可以添加\test.txt而不必擔心用戶提供了哪些輸入。但是,Path.Combine是在C#中執行此操作的真正方法。

編輯:要在將路徑傳遞到其他程序之前輕鬆刪除多餘的\,請嘗試將路徑拆分爲驅動器和文件夾名稱,並將其組合迴路徑中。就像這樣:

string path = Path.Combine(pathWithManyBackslashes.Split('\\')); 

因爲Split當分隔符重複,你擺脫他們不會創建新條目。例如,C:\David\\File.txt => [C:DavidFile.txt]。

+0

感謝您的信息關於Path.Combine。我認爲路徑無效,如在Windows資源管理器的地址欄中,或通過開始菜單的運行/搜索欄中,C:\ david \\命中錯誤。 C:\ david \\ file.txt可以通過Windows查找文件並使用默認應用啓動它。另外,在技術上我認爲記事本C:\ David \\ File.txt只是意味着記事本成功處理了它的參數中的多個反斜槓,儘管其他示例已經足夠。那麼錯誤是我們使用的處理FTP函數的第三方工具不支持多個反斜槓。 –

+0

關於命令提示符的好處就是更多的證據表明它是「事情的方式」而不是證據。我編輯添加一種方法來規範可能在你的情況下工作的路徑,以防你還沒有想到什麼。 – 31eee384