2010-11-21 28 views
2

最近、アップロードの進捗状況を確認したいと思いました。だから、私は小規模に始めて、単純なテキストファイルの読み込みを開始しました。私はその後、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(); 
+0

"また、以下のコードは動作していません。 - 自分自身を助け、何が期待どおりに機能していないかを説明するのはどうですか? –

+0

@Mitch小麦、ああ、私はエラーを追加することを忘れて、私はポストを更新しました。 'while'行にエラーが出る –

答えて

0

はおそらく

outWriter.Write(buffer,0,read); 
+0

' BinaryWriter.Write(byte []) 'もあったと思うhttp://goo.gl/or9lO –

+0

また、' offset'はなぜ0ですか?代わりに 'bytesRead'ですか?それ以外の場合はループして、書き込まれたデータを上書きしますか? –

+0

ああ、多分あなたは 'inStream.Read(buffer、0、buffer.length)'を意味していたでしょうか?これは問題を解決するので、 –

0

する必要があり、それはあなたのプログラムと思われます標準のRead()を呼び出すのではなく、文字ごとに文字を読むともっと簡単になります:

0

アップロード操作の進捗状況を確認するだけで、fileinfoオブジェクトを使用してファイルのサイズを確認できます。

FileInfoクラスでは、ファイルサイズをバイト単位で返すlengthというプロパティがあります。ファイルが書き込まれているときに現在のサイズを与えるかどうかは不明です。しかし、私はそれがあなたが使用している方法よりも簡単で効率的なので、試してみる価値があると思います

関連する問題