2016-06-10 156 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'); 

谢谢大家对你的帮助。

相关问题