FileStream未关闭文件

9

I have the following code:

using (MemoryStream str = new MemoryStream())
      {
             Program.api.GetDocument(result, str);
             using (FileStream fileStream = File.Create(filePath))
             {
                    str.WriteTo(fileStream);
             }
      }

每当写入一个文件后,它都会被锁定 - 即使在关闭应用程序后,尝试删除或修改它也会导致Windows告诉我文件正在使用中。我是否遗漏了什么?


5
这个用法看起来很好。你确定没有更多处理“filePath”的代码吗? - Oded
我认为你可能缺少了一个 str.Position = 0;,但这不会锁定 fileStream。 - H H
1
我同意指定的代码不能在代码的最后一个}之后锁定文件。必须有其他原因导致它。据我所知,即使在using语句内部发生异常,也会取消锁定。 - pyrocumulus
4
“even after closing my application” 意思是这不是你应用的问题。当你终止应用程序时,该进程的所有打开句柄都会被关闭。因此,必须是其他程序使其保持打开状态。 - CodesInChaos
1个回答

2

你的问题很可能是由于Windows搜索索引引起的,它是Windows Search的一部分。如果你在修改文件后立即(或非常短时间内)尝试访问该文件,你可能会遇到你所看到的问题。解决这个问题的最好方法是向你正在执行的文件操作添加重试逻辑,等待一段小的时间并重新尝试文件操作。

如果你想确认问题是由Windows文件搜索索引引起的,你可以禁用它对你正在编写文件的文件类型和/或位置,看看是否能解决问题。


1
你有没有任何文档或 MSDN 示例来支持索引器锁定参数?我很惊讶索引器没有使用 FileShare.ReadWrite 的开放权限来遍历文件系统。 - Ritch Melton
1
至少听起来是有道理的。而且根据位置,它也可能是一个病毒扫描器。 - H H
是的,一般来说是可行的,特别是在添加病毒扫描程序后。就像@RitchMelton所说,我确实很难相信文件系统索引器会阻止访问。那将是相当低效的。 - IAbstract

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接