2016-06-10 155 views
1

我有一個數據庫表,其中包含我使用C#腳本導入的excel文件的文件路徑。C# - 路徑中的非法字符

該腳本工作正常,除非文件路徑包含空格,例如C:\Temp\My Excel File.xls,我收到Illegal characters in path錯誤消息。不幸的是,我無法在源文件中更改文件名。

如果我硬編碼的文件路徑如下,它工作正常。

String Filepath = @"C:\Temp\My Excel File.xls"; 

我該如何改變這一點,以便我可以包含一個字符串變量,用於存儲數據庫中的文件路徑,例如:

String Filepath = //Code to get FilePath from database 

StringCorrectedFilePath = @+FilePath; 

預先感謝任何幫助

編輯:問題是由以數字創造無效轉義序列開頭的文件引起的。例如C:\Temp\20160611 My Excel File.xls

編輯2:已解決 - 錯誤是由文件擴展名後出現的回車符引起的。請參閱我的解答答案。

+0

如果用空格工作時硬編碼,這意味着你是從數據庫中獲取的文件路徑可能實際上並不包含空格的變量。您從數據庫中獲得的實際價值是多少? – Kyle

+0

文件路徑中肯定有空格,我現在正在查看數據庫表。 –

回答

3

無論你做這個

String Filepath = @"C:\Temp\My Excel File.xls"; 

或本

String Filepath = "C:\\Temp\\My Excel File.xls"; 

存儲在內存中的字符串就是C:\Temp\My Excel File.xls,無論調試器可以告訴你。所以當你從某處(數據庫,文件,用戶輸入...)讀取一些字符串時,你不需要「逃避」反斜槓。所以只需使用該字符串。

+0

感謝您的回答,但它不是導致問題的反斜槓,當文件路徑包含空格時此文件將工作「C:\ Temp \ MyExcelFile.xls」,但這不會「C:\ Temp \ My Excel File.xls」 –

+0

道歉,忽略我以前的評論。我有更多的信息。只有當文件名以數字開頭時纔會出現問題,例如「c:\ temp \ 20160611 My Excel File.xls」 –

+0

@SimonTindall您如何使用該路徑?你應該添加到你的問題。 –

1

那麼你可以用%20字符代替空格,並在檢索再次更換回用空格一樣(你不妨選擇使用正則表達式相同)

String Filepath = @"C:\Temp\My Excel File.xls"; 
Filepath = Filepath.Replace(" ", "%20"); 

在檢索回

string mypath = pathyouhavegotfromDB.Replace("%20", " "); 
-1

試試這個:

String StringCorrectedFilePath = @""+ Filepath; 
0

我認爲你需要在帶有空格的路徑上加引號。

string filepath = @"C:\Temp\My Excel File.xls";    
filepath = $"\"{filepath}\""; 
0

感謝大家的幫助,我嘗試了所有這些,不幸的是他們沒有工作,這導致我相信這個問題不是我最初的想法。

事實證明,導致Illegal characters in path的文件在文件擴展名後面都有文件名末尾的回車符。

要解決這一點,我用下面的代碼,現在它完美

FilePath = FilePath.TrimEnd('\r', '\n'); 

謝謝大家對你的幫助。

相關問題