録画データを書き出す際に、事前に1GBずつディスク上の領域を確保してから そこを埋めていくようにします。複数のRecTestが同時に1つのドライブへ 書き込みを行う場合に、断片化を大幅に抑えることができるようになります。
hf = CreateFile(〜); SetFilePointerEx(hf, 1GB, FILE_BEGIN); SetEndOfFile(hf); CloseHandle(hf);
これで、ファイル実体を書き込むことなく、管理領域の操作のみで1GBの ファイル領域をディスク上に得ることができます。この書き込みはatomicで 行われるため、他のプロセスの割り込みによってこの1GBの領域が断片化する ことはなくなります。
録画終了時には、本来の終了位置で再びSetEndOfFile()を発行するため、 ファイルサイズは有効データの分だけに縮まります。
見かけ上のファイルサイズは1GBずつ伸びますが、データがまだ書き込まれて いない領域の内容は不定となります。RecTest以外のプロセスからこの領域に アクセスがあった場合、動作不良が起こる可能性があります。
既に著しい断片化が発生しているドライブに対して実行した場合、書き込み前に 1GBの領域を断片化したディスクから細かく確保しなければならないため、 大きな待ち時間が発生する可能性があります。この作業中にデータのドロップが 発生する可能性は否めません。
追加されたコードに対する権利は一切主張しません。むしろ本家に取り込んで 頂くことを強く望みます。なお、RecTest.vcprojで一部"..\tvtest\"を参照して いるソースが残っていたのを".\"にしてありますが、ミス?>本家
バイナリは当方環境において動作試験用にコンパイルされたものです。本家との 環境の差による動作不具合があるかもしれません。またICCフォルダの内容は VC++でコンパイルしているため、本家と同様のパフォーマンスが得られない 可能性があります。