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