最近、アップロードの進捗状況を確認したいと思いました。だから、私は小規模に始めて、単純なテキストファイルの読み込みを開始しました。私はその後、Cでファイルを読み込む(/書く)
File.ReadAllText("text.txt");
のような単純なタスクがなどすべてのストリーム、リーダー、ライターで、以下のようなものになるか代取り外すことができることを発見しましたか?また、以下のコードは動作しません。たぶん私は何かが間違っていた、ストリームをローカルではないと仮定して、私は進捗状況を追跡できるように(私は書き込みが似ていると思います)バッファにどのような方法を読み込んでいます。 WebRequestクラス
byte[] buffer = new byte[2560]; // 20KB Buffer, btw, how should I decide the buffer size?
int bytesRead = 0, read = 0;
FileStream inStream = new FileStream("./text.txt", FileMode.Open, FileAccess.Read);
MemoryStream outStream = new MemoryStream();
BinaryWriter outWriter = new BinaryWriter(outStream);
// I am getting "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."
// inStream.Length = Length = 9335092
// bytesRead = 2560
// buffer.Length = 2560
while ((read = inStream.Read(buffer, bytesRead, buffer.Length)) > 0)
{
outWriter.Write(buffer);
//outStream.Write(buffer, bytesRead, buffer.Length);
bytesRead += read;
Debug.WriteLine("Progress: " + bytesRead/inStream.Length * 100 + "%");
}
outWriter.Flush();
txtLog.Text = outStream.ToString();
更新:テキストを(私が間違っている可能性が)読んでいるように見えるので、ソリューション
byte[] buffer = new byte[2560];
int bytesRead = 0, read = 0;
FileStream inStream = File.OpenRead("text.txt");
MemoryStream outStream = new MemoryStream();
while ((read = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, buffer.Length);
bytesRead += read;
Debug.WriteLine((double)bytesRead/inStream.Length * 100);
}
inStream.Close();
outStream.Close();
"また、以下のコードは動作していません。 - 自分自身を助け、何が期待どおりに機能していないかを説明するのはどうですか? –
@Mitch小麦、ああ、私はエラーを追加することを忘れて、私はポストを更新しました。 'while'行にエラーが出る –