C#File.ReadallText做奇怪的事情
我要做的是读取文件中的所有文本,如果其中包含单词“Share”,则执行正则表达式。代码如下:C#File.ReadallText做奇怪的事情,c#,C#,我要做的是读取文件中的所有文本,如果其中包含单词“Share”,则执行正则表达式。代码如下: DirectoryInfo dinfo = new DirectoryInfo(@"C:\Documents and Settings\g\Desktop\123"); FileInfo[] Files = dinfo.GetFiles("*.txt"); foreach (FileInfo filex in Files) { st
DirectoryInfo dinfo = new DirectoryInfo(@"C:\Documents and Settings\g\Desktop\123");
FileInfo[] Files = dinfo.GetFiles("*.txt");
foreach (FileInfo filex in Files)
{
string contents = File.ReadAllText(filex.FullName);
string matchingcontants = "Share";
if (contents.Contains(matchingcontants))
{
string sharename = Regex.Match(contents, @"\+(\S*)(.)(.*)(.)").Groups[3].Value;
File.AppendAllText(@"C:\sharename.txt", sharename + @"\r\n");
}
}
当我调试时,我得到。。。
contents=“\r\0\n\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0\r\0\n\0+\0S\0h\0a\0r\0e\0\\0\\0\\0j\05\02\0\\0w\0w\0w\0\
\0S\0h\0a\0r\0e\
不共享。有任何提示?提示或建议吗?看起来这是一个Unicode文件,您正在尝试将其读取为普通ASCII。看起来您有一个保存为UTF-16(即
编码.Unicode
)的文件。使用正确的编码读取该文件,一切都应该正常
幸运的是,File.ReadAllText的重载采用了以下编码:
string contents = File.ReadAllText(filex.FullName, Encoding.Unicode);
不幸的是,对于不在UTF-16中的文件,这样做是错误的。虽然有一些猜测编码的启发式方法,但理想情况下,您应该在打开文件之前知道编码。我的猜测是编码设置不正确,您可能需要使用ReadAllText(字符串,编码)指定编码。实际上,在不指定任何其他内容的情况下,它会尝试将文件读取为UTF-8。