2016-08-19 2 views
1

したがって、MediaElementを使用して再生されている2MB程度のファイルが既にダウンロードされているとします。メディアが再生されている間は、残りのファイルをダウンロードして書きたいと思っています。 このメソッドを使用すると、ファイルが既に使用中であることを示すIOExecptionエラーが発生します。MediaElementの同じファイルを再生しているときにStream.Writeメソッドを使用できない

using (Stream WriteStream = new FileStream(filename, FileMode.OpenOrCreate)) 
     { 
     WriteStream.Seek(seekpos, SeekOrigin.Begin); 
     WriteStream.Write(buffer, 0, buffer.Length); 
     WriteStream.Close(); 
     } 

ただし、この方法を使用すると正常に動作します。

FileStream1 = new System.IO.FileStream(filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite); 
FileStream1.Write(buffer, 0, buffer.Length); 

だから私は、第二の方法を使用することができますが、私は追求し、私は2番目の方法を使用して行うことができない特定の位置に書くことができるようにしたいです。とにかく私は最初の方法を使うことができます。それはFILEMODEまたはFILEACCESSと関係がありますか? ありがとう:)

答えて

0

私はそれを理解しました。私はこれを使って任意の位置で検索して書くことができます。私をばかにすると、これは分からない。

FileStream1 = new System.IO.FileStream(filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite); 
FileStream1.Seek(seekpos,SeekOrigin.Begin); 
FileStream1.Write(buffer, 0, buffer.Length); 
0

最も近いものがhereと表示され、同期ストリームと呼ばれることがあります。基本的に、同じストリーム上で動作する複数のスレッドです。特に、共有ロックを使用してMediaElementにファイルを開く方法がないため、ロックの問題を解決する必要があります。

別の方法として、MediaElementが別のファイルから再生している間に1つのファイルに書き込む方法があります。 MediaElementがファイルAで完了したら、Bを再生して新しいファイルCにダウンロードをストリームします。そして最後に、一緒に結合してください。

関連する問題