C# 使用C的文件名中缺少反斜杠#
我有一个字符串文本,如下所示:C# 使用C的文件名中缺少反斜杠#,c#,string,C#,String,我有一个字符串文本,如下所示: string filename = @"C:\myfolder\myfile.jpg"; 当我使用File.Exists(filename)时,它大部分时间都工作,但有时我会收到一个错误,说以下文件不存在: C:myfoldermyfile.jpg 似乎有什么东西把文件名的反斜杠去掉了。此代码有时通过ajax请求访问 有人知道为什么会发生这种情况吗 编辑: 下面是代码的更详细版本 public class Feeds { public static
string filename = @"C:\myfolder\myfile.jpg";
当我使用File.Exists(filename)时,它大部分时间都工作,但有时我会收到一个错误,说以下文件不存在:
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...
}
}
很可能您没有使用
Path.Combine
将路径与文件名组合。永远不要使用+运算符连接路径元素。C#中的反斜杠字符是转义字符,因此您要对m
字符“转义”两次。只要字符串中有\
,就需要一个文本\
对于您的用例,System.IO.Path.Combine似乎没有必要,因为它是一个静态路径,但是当您从两个字符串(一个带有文件夹名,另一个带有文件名)构建路径时,它是最好的方式,并且与平台无关
(编辑:由于您使用的是
@
字符前缀,因此编译器中不会对\
进行任何剥离。)反斜杠是一个转义字符,因此,在您需要将2放入一行后,才能使实际字符显示在字符串中。您需要执行“C:\myfolder\myfile.jpg”可能您只是在某个文本前面遗漏了一个@
符号-然后@“C:\mydir\myfile.txt”
会起作用,但C:\mydir\myfile.txt“
不会起作用
您可能知道,但只是以防万一:前缀为@的字符串不会像往常一样转义(即\n
序列实际上意味着反斜杠小写n而不是换行符。它很方便在源代码中包含原始换行符和其他内容,如果您想将具有大量反斜杠的内容表示为内容,则特别方便(例如regexes)。目录.Exists(string)调用返回false,因为您传递的是文件路径而不是目录路径
我不知道显示器上的反斜杠是怎么去掉的,除非它与AJAX有关。你能发布一个完整的小例子来说明这个问题吗?你能让ftpDir成为常量吗?至少你会知道它在运行时没有被修改。在你的例子中,“name”是否只包含文件名而不包含路径?有时Feeds.ftpDir+name的计算结果为:C:websiteFeedsFileName.Ext?对不起,我是这个网站的新手,不知道如何正确格式化,它应该是:C:\\myfolder\\myfile.jpghe使用带有
@
的文字前缀-这些不需要或不支持反斜杠转义。我会给出path.Combine
a try,它正是针对这种类型的操作的。这听起来好像可以解决问题。我只是不明白它为什么有时可以工作,而不是其他。我会试试这个,谢谢。