【问题标题】:FileStream not closing fileFileStream 没有关闭文件
【发布时间】:2011-11-10 14:41:53
【问题描述】:

我有以下代码:

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

每当写入文件时,它总是在之后被锁定 - 尝试删除或修改它会导致 Windows 告诉我该文件正在使用中,即使在关闭我的应用程序之后也是如此。我错过了什么吗?

【问题讨论】:

  • 这个用法看起来不错。你确定没有更多代码处理filePath
  • 我认为您可能缺少str.Position = 0; 但这不会锁定文件流
  • 我同意指定的代码不会在代码的最后 } 之后导致文件锁定。一定是有别的原因造成的。即使 using 语句中的异常也会取消锁定,afaik。
  • “即使在关闭我的应用程序之后”意味着这不是您的应用程序的错。当您终止它时,您的进程的所有打开的句柄都会关闭。所以它一定是其他一些程序让它保持打开状态。

标签: c# filestream memorystream


【解决方案1】:

您的问题很可能是由Windows Search 中的 Windows 搜索索引引起的。如果您尝试在修改后立即(或很快)访问该文件,您可能会遇到您所看到的问题。解决此问题的最佳方法是向您正在执行的文件操作添加重试逻辑,该操作会等待一小段时间并重新尝试文件操作。

如果您想确认问题是由 Windows 文件搜索索引引起的,您可以disable it for the file type and/or location where you are writing your file 看看是否可以解决问题。

【讨论】:

  • 您有任何文档或 msdn 示例来支持索引器锁定参数吗?我很惊讶索引器没有使用 FileShare.ReadWrite 的开放权限来控制文件系统
  • 听起来至少是合理的。并且根据位置,它也可能是 Virusscanner。
  • 是的,通常是合理的,当病毒扫描程序添加到组合中时肯定如此。像@RitchMelton 一样,我确实很难相信文件系统索引器正在阻止访问。那会适得其反。
猜你喜欢
  • 2012-04-08
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2014-06-12
  • 2015-10-18
  • 2023-03-06
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多