假设我有一个大约2MB的文件已经下载并写入,正在使用MediaElement播放。因此,在播放媒体时,我想下载并写入文件的其余部分。如果我使用这个方法,我得到一个ioexception错误,指示文件已经在使用中。
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);
所以我可以使用第二种方法,但我希望能够在某些位置查找和写入,这是使用第二种方法无法做到的。那么我是否可以用第一种方法呢?它是否与FILEMODE或FILEACCESS有关?谢谢:)
您可能得到的最接近的可能是这里显示的所谓的同步流。本质上,它是多个线程作用于同一流。您必须解决锁定问题,特别是因为您可能无法让MediaElement使用共享锁打开文件。
另一种方法可能是在MediaElement从另一个文件播放时写入一个文件。当MediaElement完成文件A时,播放B并流式下载到新文件c,重复。然后,在最后,将它们合并在一起。
没关系,我想出来了。我可以用它在任何位置寻找和写作。我真笨,竟然没有意识到这一点。
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);