次の操作では、入力として前の操作の結果が必要な場合に、それぞれ操作をテキストファイルに適用するいくつかのメソッドがあります。
private TextReader input = new StreamReader("input.txt");
private TextWriter output = new StreamWriter("output.txt");
MemoryStream result_1 = new MemoryStream();
MemoryStream result_2 = new MemoryStream();
Operation_1(input, ref result_1);
Operation_2(result_1, ref result_2);
Operation_3(result_2, output);
Operation_1 のコード:
private void Operation_1(TextReader input, ref MemoryStream output)
{
TextWriter outputWriter = new StreamWriter(output);
String line;
while (input.Peek() >= 0) //while not end of file
{
line = input.ReadLine();
//perform operation on line
outputWriter.writeline(line);
}
input.Close();
}
operation_2 のコード:
private void Operation_2(TextReader input, ref MemoryStream output)
{
input.Seek(0, SeekOrigin.Begin); //reset stream to start of file
TextReader inputReader = new StreamReader(input);
TextWriter outputWriter = new StreamWriter(output);
String line;
while (inputReader.Peek() >= 0) //while not end of file
{
line = inputReader.ReadLine();
//perform operation on line
outputWriter.writeline(line);
}
inputReader.Close();
}
operation_3 のコード:
private void operation_3(MemoryStream input, TextWriter output)
{
input.Seek(0, SeekOrigin.Begin); //reset stream to start of file
TextReader inputReader = new StreamReader(input);
String line;
while (inputReader.Peek() >= 0) //while not end of file
{
line = inputReader.ReadLine();
//perform operation on line
output.writeline(line);
}
inputReader.Close();
output.Close();
}
問題は、各中間結果をハードディスク上の物理txtファイルに保存し、そのファイルを次の操作に使用するのと同じ結果が得られないことです。数行とファイルの末尾が欠落しています。
また、これは非常にクリーンで一般的な方法ではないようです。
したがって、私の質問です。中間結果に MemoryStream を使用すると結果が異なるのはなぜですか?これを行うためのよりクリーンで柔軟な方法はありますか? (中間結果を保存するかどうかを選択できる場合は、解決策に取り組みたいと思います)。