C# - 路径中含有非法字符

4
我有一个数据库表,其中包含使用C#脚本导入的Excel文件的文件路径。

除非文件路径包含空格,否则脚本可以正常工作,例如: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: 已解决 - 错误是由于文件扩展名后出现回车符造成的。请查看我的答案以获取解决方案。


如果在硬编码变量时可以使用空格,那么这意味着从数据库获取的文件路径实际上可能不包含空格。你从数据库中获取的实际值是什么? - Kyle
文件路径中肯定有空格,我现在正在查看数据库表。 - Simon
6个回答

6
无论您是这样做
String Filepath = @"C:\Temp\My Excel File.xls";

或者这个

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

存储在内存中的字符串只是 C:\Temp\My Excel File.xls,无论调试器告诉你什么。因此,当你从某个地方(数据库、文件、用户输入等)读取字符串时,不需要“转义”反斜杠。所以直接使用该字符串即可。


谢谢您的回答,但问题不在反斜杠上,而是当文件路径包含空格时,例如:这个文件可以工作 "C:\Temp\MyExcelFile.xls",但这个文件就不行了 "C:\Temp\My Excel File.xls"。 - Simon
抱歉,请忽略我之前的评论。我有更多的信息。问题只会在文件名以数字开头时出现,例如:“c:\ temp \ 20160611 My Excel File.xls”。 - Simon
@SimonTindall 你是如何使用那个路径的?你应该把这个问题加入到你的问题描述中。 - Hans Kesting
谢谢大家的帮助,结果发现非法字符是出现在文件扩展名后面的回车符。如果不是你们的指点,我就找不到解决方案了,我已经相应地点赞了! - Simon

2

1
你可以使用%20字符替换空格,然后在检索时再将其替换回空格(您也可以选择使用正则表达式来完成相同的操作)。
String Filepath = @"C:\Temp\My Excel File.xls";
Filepath = Filepath.Replace(" ", "%20");

当检索回来时

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

0

我认为你需要在带有空格的路径周围加上引号。

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

0
感谢大家的帮助,我尝试了所有方法,但不幸的是它们都没有起作用,这让我相信问题并不是我最初想象的那样。
事实证明,导致“路径中有非法字符”的文件名末尾都有回车符号,位于文件扩展名之后。
为了解决这个问题,我使用了以下代码,现在它完美地工作了。
FilePath = FilePath.TrimEnd('\r', '\n');

感谢大家的帮助。


-1

试试这个:

String StringCorrectedFilePath = @""+ Filepath;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接