我有一个字符串文字如下:
string filename = @"C:\myfolder\myfile.jpg";
当我使用File.Exists(文件名)时,它大部分时间都有效,但有时我会收到一条错误消息,说明以下文件不存在:
C:myfoldermyfile.jpg
似乎有些东西会从文件名中删除反斜杠。有时可以通过ajax请求访问此代码。
有谁知道为什么/如何发生这种情况?
编辑:
以下是代码的更详细版本。
public class Feeds {
public static string ftpDir = @"C:\website\Feeds\";
}
public class Feed {
public static void run(string name) {
if (!Directory.Exists(Feeds.ftpDir + name)){
Response.Write("Feed doesn't exist '" + Feeds.ftpDir + name + "'");
return;
}
//run feed...
}
}
答案 0 :(得分:8)
很可能您没有使用Path.Combine
将路径与文件名组合在一起。你永远不应该使用+运算符连接路径元素。
答案 1 :(得分:3)
可能你只是错过了某个文字前面的@
符号 - 然后@"C:\mydir\myfile.txt"
会有用,但"C:\mydir\myfile.txt"
不会。
您可能知道,但以防万一:前缀为@的字符串不会像往常一样进行转义(即\n
序列实际上意味着反斜杠 - 小写n而不是换行符。它包含原始换行符很方便和其他东西在源代码中,如果你想用大量的反斜杠作为内容(例如正则表达式)来代表某些内容,那就特别方便了。
答案 2 :(得分:0)
C#中的反斜杠字符是转义字符,因此您可以“转义”m
字符两次。在字符串中您需要\\
的任何地方都需要文字\
。
对于您的用例,System.IO.Path.Combine似乎没有必要,因为它是一个静态路径,但是当您从两个字符串构建路径时,一个文件夹名称,另一个文件名,这是最好的方式,而且它与平台无关。
(编辑:,因为您使用的是@
字符前缀,编译器中没有发现\
的任何剥离。)
答案 3 :(得分:0)
反斜杠是一个转义字符,因此在您需要连续放置2以使实际字符显示在字符串中之后。你需要做“C:\ myfolder \ myfile.jpg”
答案 4 :(得分:0)
Directory.Exists(string)
调用返回false,因为您传递的是文件路径而不是目录路径。
我不知道是什么剥离了显示屏上的反斜杠,除非它与AJAX有关。