0

我有一个程序可以在播放视频文件时复制它们。

通常,每当我在我的程序中关闭() FileStream 时,视频播放器(第 3 方)无法访问文件大约半秒(播放冻结)。

据我所知,如果我使用 Dispose() 而不是 Close() 并不重要。该文件按预期复制到新位置,因此播放冻结是我需要解决的问题,但坦率地说,我不知道第 3 方软件如何读取文件的具体细节。我只是无法理解为什么在我关闭阅读流时会出现问题。

我想避免将复制过程推迟到视频播放器播放完毕。

任何建议将不胜感激。

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();
4

2 回答 2

0

您是否尝试过将文件流包装到使用构造中?它在执行后自动处理对象。

using (FileStream SourceFile = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
//read
}
于 2013-10-14T14:29:49.147 回答
0

很抱歉打扰了你们,但事实证明问题出在程序的编写部分。

写这个的人没有刷新写入流,这意味着当读取循环结束时缓存了很多数据。这反过来意味着在 Close() 时间使用了大量系统资源。

我切换到接受 FileOptions.WriteThough 参数的构造函数(用于写入流)。这似乎解决了这个问题。

感谢您提供的建议...我会在创建下一个问题时尝试更彻底。

于 2013-10-18T11:13:03.110 回答