これは受け入れられた答えに似ていますが、もっと要点を述べたかったのです。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(@"\\", @"\"); // replace double-slashes with single slashes
string myFilePath = folderLoc + "myEventFile.txt";
if (!File.Exists(myFilePath))
File.Create(myFilePath).Close(); // must .Close() since will conflict with opening FileStream, below
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) // we have something
{
// (char)2660 is ♠ -- I could have chosen any delimiter I did not
// expect to find in my text
myEvents = myEvents.Replace(Environment.NewLine, ((char)2660).ToString());
string[] eventArray = myEvents.Split((char)2660);
foreach (string s in eventArray)
{
if (!String.IsNullOrEmpty(s))
// do whatever with the individual strings from your file
}
}
そして、これはうまくいきました。つまり、文字を置き換えて、その文字を使用してその文字列を実行し、個々のセグメントに分割することができたので、文字を保持する必要があったことを私は知ってmyEvents
います。Environment.NewLine
(char)2660
.Split()