C# - 路径中的非法字符

C# - Illegal characters in path

我有一个数据库 table,其中包含我使用 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:\Temp160611 My Excel File.xls

编辑 2:已解决 - 文件扩展名后出现回车 return 字符导致错误。解决方案请看我的回答。

好吧,你可以用 %20 字符替换空白 space,然后在检索时再次用空白 space 替换回来(你也可以选择使用正则表达式)

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

取回时

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

试试这个:

String StringCorrectedFilePath = @""+ Filepath;

我认为您需要在带空格的路径两边加上引号。

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

你是否这样做

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

或者这个

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

存储在内存中的字符串只是 C:\Temp\My Excel File.xls,无论调试器可能告诉您什么。因此,当您从某处(数据库、文件、用户输入等)读取一些字符串时,您不需要 "escape" 反斜杠。所以只需使用该字符串即可。

感谢大家的帮助,这些我都试过了,不幸的是它们都没有用,这让我相信问题不是我最初想的那样。

事实证明,导致 Illegal characters in path 的文件在文件扩展名后的文件名末尾都有回车符 return。

为了解决这个问题,我使用了以下代码,现在它可以完美运行了

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

感谢大家的帮助。

Path.GetInvalidFileNameChars

FilePath = string.Concat(FilePath.Split(System.IO.Path.GetInvalidFileNameChars())).Trim();