Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-路径中的非法字符_C#_String_Verbatim String - Fatal编程技术网

C#-路径中的非法字符

C#-路径中的非法字符,c#,string,verbatim-string,C#,String,Verbatim String,我有一个数据库表,其中包含我使用C#脚本导入的excel文件的文件路径 脚本工作正常,除非文件路径包含空格,例如C:\Temp\My Excel File.xls,并且我在路径中收到非法字符的错误消息。很遗憾,我无法在源位置更改文件名 如果我硬编码的文件路径如下,它的作品罚款 String Filepath = @"C:\Temp\My Excel File.xls"; 我如何修改它,以便包含一个字符串变量来存储数据库中的文件路径,例如 String Filepath = //Code to

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

脚本工作正常,除非文件路径包含空格,例如
C:\Temp\My Excel File.xls
,并且我在路径中收到
非法字符的错误消息。很遗憾,我无法在源位置更改文件名

如果我硬编码的文件路径如下,它的作品罚款

String Filepath = @"C:\Temp\My Excel File.xls";
我如何修改它,以便包含一个字符串变量来存储数据库中的文件路径,例如

String Filepath = //Code to get FilePath from database

StringCorrectedFilePath = @+FilePath;
事先谢谢你的帮助

编辑:问题是由以数字开头的文件造成的,这些文件创建了无效的转义序列。e、 g.
C:\Temp\20160611我的Excel文件.xls


编辑2:已解决-错误是由文件扩展名后出现的回车字符引起的。请参阅我的答案以了解解决方案。

您可以使用
%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
,不管调试器会告诉您什么。因此,当您从某处(数据库、文件、用户输入等)读取一些字符串时,您不需要“转义”反斜杠。所以就用这个字符串吧。

谢谢大家的帮助,我尝试了所有这些,但不幸的是它们都不起作用,这让我相信问题并不是我最初所想的

结果表明,导致路径
中出现非法字符的文件在文件扩展名之后的文件名末尾都有回车字符

为了解决这个问题,我使用了下面的代码,现在它工作得很好

FilePath = FilePath.TrimEnd('\r', '\n');
谢谢大家的帮助。


如果它在硬编码变量时使用空格,则意味着从数据库获取的文件路径实际上可能不包含空格。您从数据库中得到的实际值是多少?文件路径中肯定有空格,我现在正在查看数据库表。感谢您的回答,但这不是导致问题的反斜杠,而是文件路径包含空格时的反斜杠。例如,此文件将在“C:\Temp\MyExcelFile.xls”下工作,但此文件不会工作“C:\Temp\My Excel File.xls”抱歉,请忽略我之前的评论。我有更多信息。只有当文件名以数字开头,即“C:\Temp\20160611 My Excel File.xls”时,才会出现问题“@SimonTindall你是如何使用这条路径的?你应该把这个添加到你的问题中。谢谢大家的帮助,原来非法字符是在文件扩展名之后出现的回车符。如果不是你的指点,我不会找到解决办法,我也相应地投了赞成票!
FilePath = FilePath.TrimEnd('\r', '\n');
FilePath = string.Concat(FilePath.Split(System.IO.Path.GetInvalidFileNameChars())).Trim();