C# 读取文件的差异

C# 读取文件的差异,c#,C#,在上面的语句中,使用@“C:\file.txt”与C:\file.txt的区别是什么时候编译器将按原样读取@“C:\file.txt”。删除逐字(@)将使其将'\f'视为单个转义字符()。换言之: string value1 = File.ReadAllText("C:\\file.txt"); string value2 = File.ReadAllText(@"C:\file.txt"); 逐字字符串文字以@开头,也包含在双引号中 引号。例如: @"C:\file.txt" == "C:\

在上面的语句中,使用@“C:\file.txt”与C:\file.txt的区别是什么时候

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

string value1 = File.ReadAllText("C:\\file.txt");
string value2 = File.ReadAllText(@"C:\file.txt");
逐字字符串文字以@开头,也包含在双引号中 引号。例如:

@"C:\file.txt" == "C:\\file.txt"
@"C:\file.txt" != "C:\file.txt" // treated as C: + FormFeed + ile.txt
逐字字符串的优点是转义序列不受限制 已处理,这使得编写(例如)完整的 限定文件名:

@"good morning"  // a string literal
:

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

逐字字符串文字由@字符后跟 双引号字符、零个或多个字符和结束符 双引号字符。一个简单的例子是@“你好”。一字不差 字符串文字,分隔符之间的字符被解释 逐字记录,唯一的例外是引号转义序列。在里面 特殊的简单转义序列和十六进制和Unicode转义 序列不以逐字字符串文字处理。逐字记录 字符串文字可以跨越多行


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

@
将允许您在每次需要
\
时构建字符串,而无需使用
\

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"
value1的字符串将包含一个formfeed字符,其中\f是,而第二个字符串将保留反斜杠和f。(如果您尝试在带有console.Write…)的控制台应用程序中输出它们,这一点会变得非常清楚)

value1版本的正确方式是
“C:\\file.txt”

(value2版本使用Dmitry所说的逐字字符串)

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