c#FileStream(FileAccess.Read)阻止其他程序访问.Close()

时间:2013-10-14 14:14:18

标签: c# filestream

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

每当我关闭()程序中的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();

2 个答案:

答案 0 :(得分:0)

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

using (FileStream SourceFile = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
//read
}

答案 1 :(得分:0)

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

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

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

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