不能使用流.在MediaElement中播放相同文件时写入方法

本文关键字:文件 方法 播放 MediaElement 不能 | 更新日期: 2023-09-27 18:02:58

假设我有一个大约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从另一个文件播放时写入一个文件。当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);