使用C#在文件名中缺少反斜杠

时间:2010-03-25 18:11:04

标签: c# string

我有一个字符串文字如下:

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...

    }

}

5 个答案:

答案 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有关。