0

私は非常に単純なことをしようとしています。

StreamWriter(string path) コンストラクターに関連付けられているデフォルトのバッファーサイズが、ログに記録している情報に対して小さすぎることを確認する際に、次のコンストラクターを使用しようとしています。

public StreamWriter(
    string path,
    bool append,
    Encoding encoding,
    int bufferSize
)

結果のログ ファイルは完全に空です。これはさらに悪いことです。

注: 私の元の投稿では、「エラー: ストリームの終わりを過ぎて読み取ろうとしました」というエラーを引用しましたが、これはメソッドの後半の機能に関連しており、このログ ファイルの問題のために情報をログに記録できません。

私のコードからの古いコンストラクターの使用法は次のとおりです。

drawGameBoardLog = new StreamWriter(debugFileName);

そして、皮肉なことに事態を悪化させる新しいコンストラクターを次に示します。

drawGameBoardLog = new StreamWriter(debugFileName, false, System.Text.Encoding.Default, 65535);

私はこれに完全に困惑しています。

更新: いくつかの詳細:

これは、アクティビティを記録しているメソッドの開始です。

    public void DrawGameBoard()
    {
        StreamWriter drawGameBoardLog;
        bool debug = true;

        // Logging---------------------------------------------------------------------------------
        // Build timestamp string
        DateTime currentDateTime = DateTime.Now;
        string timeStampString = currentDateTime.ToString("ddMMyyyy_HHmmss");

        // Build filename, concat timestamp and .txt extension.
        string debugFileName = "D:\\Programming\\PacmanLogs\\DrawGameBoard"+timeStampString+".txt";

        // Create filestream and pass this to a stream writer, setting a nice big buffer.
        drawGameBoardLog = new StreamWriter(debugFileName, false, System.Text.Encoding.Default, 65535);
        //drawGameBoardLog = new StreamWriter(debugFileName);

        // Write to the file:
        drawGameBoardLog.WriteLine(DateTime.Now);
        drawGameBoardLog.WriteLine("timeStampString = {0}",timeStampString);
        // -------------------------------------------------------------------------------------------

        if(debug){drawGameBoardLog.WriteLine("DrawGameBoard()...");}

パス、追加、エンコーディング、およびバッファサイズを受け入れる StreamWriter コンストラクタを使用すると、「DrawGameBoard()...」という行さえ表示されません。以前は、ファイル サイズが 1K になるコンテンツを取得していました。その時点までのログ ファイルを次に示します (ちなみに、私はグラフィックス プログラミングから始めています)。

19/08/2012 14:13:21
timeStampString = 19082012_141321
DrawGameBoard()...
noOfIndexes = [6], noOfVertices = [4]
...just set stremSize = [80]
...creating vertices DataStream...
...building Matrices...
...Scaling matrix DONE...
...Rotation matrix DONE...
...Translation matrix DONE...
...Orthogonal matrix DONE...
...Perspective matrix DONE...
...COMBINED matrix DONE...
...creating Vector3 and Vector2 arrays to hold positions and texture coords...
...Writing Texture coords....
...Building Index Array (order of vertices to be drawn for a quad)....
...Declaring indicesStream. Set size of stream to [24]....
...Created data stream for indices OK. Now writing indices array to it....
...DONE. Just set position back to ZERO...
...Created new index buffer OK....
...configure the Input Assembler....
...Getting Vectors for position [0,0]...
...Got Vectors into myVectorPositions....
myVectorPositions[0] = [X:0 Y:0 Z:0.5]
myVectorPositions[1] = [X:20 Y:0 Z:0.5]
myVectorPositions[2] = [X:0 Y:20 Z:0.5]

デフォルトのバッファサイズがすぐに始まります。

4

2 に答える 2

1

StreamWriter を閉じていません。最後に次のように入力します。

drawGameBoardLog.Close();

またはusingブロックを使用します。

using(StreamWriter sw = new StreamWriter(path))
{
     sw.WriteLine("Sth");
}

または最後に試してください:

StreamWriter sw;

try
{
   sw = new StreamWriter(path);
   sw.WriteLine("sth");

}
finally
{
   sw.Close();
}
于 2012-08-19T13:29:13.373 に答える
1

この行を変更してください

 drawGameBoardLog = new StreamWriter(debugFileName, false, 
                      System.Text.Encoding.Default, 65535); 

 using(StreamWriter drawGameBoardLog = new StreamWriter(debugFileName, false, 
                      System.Text.Encoding.Default, 65535))
 {


  .... write all the stuff in your log

 }  

usingステートメント ブロックにより、ストリームライターが閉じられ、ディスクに書き込まれることが保証されます。

おそらく、バッファなしで StreamWriter を使用した最初の試みは部分的に機能しましたが、バッファを大きな値に変更すると、そのサイズに達したときにのみファイルがディスクに書き込まれます。

于 2012-08-19T13:30:55.327 に答える