在 MediaElement 中播放同一文件时无法使用 Stream.Write 方法

Can't Use Stream.Write method while playing same file in MediaElement

所以假设我有一个大约 2MB 的文件已经下载和写入,正在使用 MediaElement 播放。因此,在播放媒体时,我想下载并写入文件的其余部分。 如果我使用此方法,我会收到一个 IOExecption 错误,指示该文件已在使用中。

 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 有关系吗? 谢谢:)

您可能获得的最接近的可能会显示 here 与所谓的同步流。本质上,它是多个线程作用于同一个流。您必须解决锁定问题,尤其是因为您可能无法让 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);