0

再生中にビデオ ファイルをコピーするプログラムがあります。

多くの場合、ビデオ プレーヤー (サード パーティ) は、プログラムで FileStream を Close() するたびに、約 0.5 秒間ファイルにアクセスできません (再生がフリーズします)。

私が知る限り、Close() の代わりに Dispose() を使用しても問題ありません。ファイルは期待どおりに新しい場所にコピーされるため、再生のフリーズは解決する必要がある問題ですが、率直に言って、サードパーティのソフトウェアがファイルを読み取る方法の詳細はわかりません。読み取りストリームを閉じたときに問題が正確に発生する理由を理解できません。

ビデオ プレーヤーの再生が完了するまで、コピー プロセスを延期する必要はありません。

任意の提案をいただければ幸いです。

FileStream SourceFile = new FileStream(sourcePath, FileMode.Open, FileAccess.Read);

while(bytesLeftToCopy > 0)
{
 int _BlockSize = 1024 * 1024;
 byte[] _BlockBuffer = new byte[_BlockSize];

 SourceFileBytes = SourceFile.Read(_BlockBuffer, 0, _BlockSize);
 //you get the idea
}
SourceFile.Close();
4

2 に答える 2

0

お手数をおかけして申し訳ありませんが、問題はプログラムの書き込み部分にあったことが判明しました。

これを書いた人は書き込みストリームをフラッシュしませんでした。つまり、読み取りループが終了したときに大量のデータがキャッシュされました。これは、Close() 時に大量のシステム リソースが使用されたことを意味します。

FileOptions.WriteThough 引数を受け入れるコンストラクター (書き込みストリーム用) に切り替えました。これで問題は解決したようです。

あなたが提供した提案に感謝します.次の質問を作成するときは、より徹底的にしようと思います.

于 2013-10-18T11:13:03.110 に答える