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

c#FileStream(FileAccess.Read)在.Close()上阻止其他程序访问,c#,filestream,C#,Filestream,我有一个程序可以在播放视频文件时复制它们 通常,每当我关闭()程序中的文件流时,视频播放器(第三方)在大约半秒钟内无法访问该文件(播放冻结) 据我所知,使用Dispose()而不是Close()并不重要。 文件按预期复制到新位置,因此播放冻结是我需要解决的问题,但坦率地说,我不知道第三方软件读取文件的具体方式。 我就是不明白为什么在我关闭阅读流时问题会出现 我希望避免将复制过程推迟到视频播放器播放完毕 如有任何建议,将不胜感激 FileStream SourceFile = new FileSt

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

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

据我所知,使用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();

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

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

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

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

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


谢谢你提供的建议。。。当我提出下一个问题时,我会尽量更彻底。

不清楚你在问什么?您想同时在两个程序中打开
FileStream
?是复制失败还是视频播放失败?哪个叫第一?您确定这两个操作都不会锁定文件的额外读取访问权限吗?抱歉,我将尝试进一步说明您不使用
文件的原因。复制
?是的,该程序旨在限制复制过程的速度,因此,计算机上的其他进程总是有足够的资源。这与使用Close()或Dispose()的工作方式是否不同?从MSDN中我可以发现事实并非如此。我已经再次阅读了你的帖子,现在我明白了。您是否尝试将constructor与非默认的fileshare属性一起使用?我会试试这个,然后再告诉你这个答案让我看看其他的构造器,这反过来又让我找到了答案。