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
C# 使用C的文件名中缺少反斜杠#_C#_String - Fatal编程技术网

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,它正是针对这种类型的操作的。这听起来好像可以解决问题。我只是不明白它为什么有时可以工作,而不是其他。我会试试这个,谢谢。