我有一个程序可以在播放时复制视频文件。
每当我关闭()程序中的FileStream时,视频播放器(第三方)通常无法访问该文件约半秒(播放冻结)。
据我所知,如果我使用Dispose()而不是Close()并不重要。 该文件按预期复制到新位置,因此回放冻结是我需要解决的问题,但坦率地说,我不知道第三方软件如何读取文件的细节。 我无法理解当我关闭阅读流时问题出现的原因。
我希望避免在视频播放器完成播放之前推迟复制过程。
任何建议都将受到赞赏。
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();
答案 0 :(得分:0)
您是否尝试过将文件流包装成使用构造?它会在执行后自动处理对象。
using (FileStream SourceFile = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
//read
}
答案 1 :(得分:0)
很抱歉打扰了你们,但事实证明问题出在了程序的写作部分。
写这篇文章的人没有刷新写入流,这意味着当读取循环结束时缓存了大量数据。这反过来意味着在Close()时使用了很多系统资源。
我切换到接受FileOptions.WriteThough参数的构造函数(用于写入流)。这似乎解决了这个问题。
感谢您提供的建议......当我创建下一个问题时,我会尝试更加彻底。