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:已解决 - 错误是由文件扩展名后出现的回车字符引起的。请参阅我的答案以获取解决方案。

4

6 回答 6

5

无论你这样做

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

或这个

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

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

于 2016-06-10T20:17:57.030 回答
2

Path.GetInvalidFileNameChars

FilePath = string.Concat(FilePath.Split(System.IO.Path.GetInvalidFileNameChars())).Trim();
于 2016-08-03T11:42:25.167 回答
1

那么你可以用字符替换空格%20,同时用空格再次检索替换(你也可以选择使用正则表达式)

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

取回时

string mypath = pathyouhavegotfromDB.Replace("%20", " ");
于 2016-06-10T19:45:44.330 回答
0

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

string filepath = @"C:\Temp\My Excel File.xls";            
filepath = $"\"{filepath}\"";
于 2016-06-10T19:55:05.797 回答
0

感谢大家的帮助,我尝试了所有这些,不幸的是它们没有工作,这让我相信这个问题不是我最初的想法。

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

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

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

感谢大家的帮助。

于 2016-06-12T06:18:08.077 回答
-1

尝试这个:

String StringCorrectedFilePath = @""+ Filepath;
于 2016-06-10T19:47:34.867 回答