这与被接受的答案类似,但想要更直接。 sr.ReadToEnd()
将读取所需的字节:
string myFilePath = @"C:\temp\somefile.txt";
string myEvents = String.Empty;
FileStream fs = new FileStream(myFilePath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
myEvents = sr.ReadToEnd();
sr.Close();
fs.Close();
你甚至可以使用级联的using
语句来完成这些操作。但是我想描述一下,你首先写入文件的方式将决定如何从myEvents
字符串中读取内容,并且可能真正存在问题的地方就在于此。我是这样写入文件的:
using System.Reflection;
using System.IO;
private static void RecordEvents(string someEvent)
{
string folderLoc = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (!folderLoc.EndsWith(@"\")) folderLoc += @"\";
folderLoc = folderLoc.Replace(@"\\", @"\");
string myFilePath = folderLoc + "myEventFile.txt";
if (!File.Exists(myFilePath))
File.Create(myFilePath).Close();
FileStream fs = new FileStream(myFilePath, FileMode.Append);
StreamWriter sr = new StreamWriter(fs);
sr.Write(someEvent + Environment.NewLine);
sr.Close();
fs.Close();
}
然后我可以使用上面更远的代码来获取内容的字符串。因为我正在进一步查找单个字符串,所以我将此代码放在那个代码之后,就像这样:
if (myEvents != String.Empty)
{
myEvents = myEvents.Replace(Environment.NewLine, ((char)2660).ToString());
string[] eventArray = myEvents.Split((char)2660);
foreach (string s in eventArray)
{
if (!String.IsNullOrEmpty(s))
}
}
这个很好用。所以我知道myEvents
必须保留Environment.NewLine
字符,因为我能够用(char)2660
替换它,并使用该字符对字符串进行.Split()
操作,将其分成单独的段落。
\n\r\n
代表换行符-回车符-换行符。所以当它读取时,很有可能会优先选择回车符-换行符组合,以便删除开头的悬挂换行符。但我对.NET的StreamReader内部工作机制并不是很了解 :( - Simon Whiteheadnew string(System.IO.File.ReadAllBytes(filename).Select(b => (char)b).ToArray())
这样的东西吗?不过还是有地方会转换\n
,我需要进一步调查。 - greenoldman