阅读文件的差异

时间:2011-09-24 23:47:20

标签: c#

string value1 = File.ReadAllText("C:\\file.txt");
string value2 = File.ReadAllText(@"C:\file.txt");

在上述陈述中,使用 @“C:\ file.txt” C:\ file.txt

的区别何时不同

3 个答案:

答案 0 :(得分:5)

编译器会按原样读取 @“C:\ file.txt”。删除逐字(@)将使其将'\ f'视为单个转义字符(Form feed)。换句话说:

@"C:\file.txt" == "C:\\file.txt"
@"C:\file.txt" != "C:\file.txt" // treated as C: + FormFeed + ile.txt
  

逐字字符串文字以@开头,也包含在double中   引号。例如:

@"good morning"  // a string literal
     

逐字字符串的优点是转义序列不是   处理,这使得它易于编写,例如,完全   合格的文件名:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

String literals

  

常规字符串文字由零个或多个字符组成   在双引号中,如“hello”,并且可能包括简单的转义   序列(例如\ t表示制表符)和十六进制和   Unicode转义序列。

     

逐字字符串文字由@字符后跟a组成   双引号字符,零个或多个字符,以及结束   双引号字符。一个简单的例子就是@“你好”。在逐字   字符串文字,分隔符之间的字符被解释   verbatim ,唯一的例外是quote-escape-sequence。在   特别是,简单的转义序列和十六进制和Unicode转义   序列不以逐字字符串文字处理。一字不差   字符串文字可能跨越多行。

答案 1 :(得分:1)

在字符串中使用\时,通常必须使用\\,因为\是转义字符。实际上,您显示的第一个字符串(File.ReadAllText("C:\file.txt");)应该抛出编译错误。

@允许您在每次需要\\时不使用\来构建字符串。

答案 2 :(得分:0)

string value1 = "C:\file.txt";
string value2 = @"C:\file.txt";

value1的字符串将包含一个formfeed字符,其中\ f是,而第二个字符串将保留反斜杠和f。 (如果您尝试使用Console.Write在控制台应用程序中输出它们,这将变得非常清楚......)

value1版本的正确方法是"C:\\file.txt"

(value2版本使用什么叫做,如Dmitry所说,是一个逐字字符串)