FileStream.close() 不会为其他进程释放文件

2024-01-08

我在 Page_Load 调用的函数中有以下代码。启动 Visual Studio 后首次加载页面时,一切正常。
但此后对文件的任何其他打开调用都会返回IOException: "File is in use by another process",即使直接在 VisualStudio 解决方案中打开文件也会返回此错误(当然不是异常)

FileStream mailinglist_FileStream = new FileStream(@"\foobarFile.txt", FileMode.Open);
PeekingStreamReader mailinglist_Reader = new PeekingStreamReader(mailinglist_FileStream);
//Do some stuff with the file
mailinglist_FileStream.Close();
mailinglist_Reader.Close();
mailinglist_Reader.Dispose();
mailinglist_FileStream.Dispose();

为什么文件仍然被锁定?为什么完全重新启动 Visual Studio 会重置文件? 检查文件属性时它说:

构建操作:内容
复制到输出目录:不复制

我只阅读这个文件。我可以做类似的事情吗adLockOptimistic,以便多个进程可以访问该文件?


为什么文件仍然被锁定?以及为什么完全重新启动 Visual Studio 重置文件?检查文件属性时,它显示[...] 我不知道为什么文件仍然被锁定:可能是因为您的代码在流关闭/处置之前失败。

About “为什么要完全重新启动 Visual Studio [...]”:因为您可能使用 IIS Express 或 ASP.NET Dev Server,它们在您关闭 IDE 时也会关闭,因此文件上的锁会被释放,因为持有锁的进程不再运行。

还有关于“为什么文件仍然被锁定?[...]“这可能是因为文件流未关闭,因为有时线程可能无法成功结束并且锁未释放。

正如其他答案所说,检查如何using块可以避免这种情况IDisposable对象不会被处置:

// FileShare.ReadWrite will allow other processes 
// to read and write the target file even if other processes 
// are working with the same file
using var mailinglist_FileStream = new FileStream(@"\foobarFile.txt", FileMode.Open, FileShare.ReadWrite);
using var mailinglist_Reader = new PeekingStreamReader(mailinglist_FileStream);
      // Do your stuff. Using blocks will call Dispose() for 
      // you even if something goes wrong, as it's equal to a try/finally! 

我只阅读这个文件。我可以做类似的事情吗 adLockOptimistic,让多个进程可以访问该File?

是的,看看File.Open方法和FileShare枚举:

  • File.Open: http://msdn.microsoft.com/en-us/library/y973b725.aspx http://msdn.microsoft.com/en-us/library/y973b725.aspx
  • FileShare enum: http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FileStream.close() 不会为其他进程释放文件 的相关文章

随机推荐

  • 替代 async/await

    在我的应用程序中 我有最新分数列表 有时我必须更新 我有这两个函数可以做到这一点 function handleLastestScoresChange scope newLatestScores getNewLatestScores the
  • OAuth 2.0 OpenID Connect Loopback 和 Keycloak

    我无法从 Loopback 连接到 Keycloak 我一直在尝试使用 keycloak connect 库 https github com keycloak keycloak nodejs connect https github co
  • 使用 Swift 从 NSData 中获取数据

    我正在寻找Swift and NSData成为一场令人沮丧的邪恶婚姻 我发现每次处理这件事时 我都觉得所有所谓的新发现的 Swift 安全性都消失了 崩溃的数量 带有无用的痕迹 没有帮助 所以 我了解到 我可以避免可怕的事情UnsafeMu
  • 使用“extern template”来防止模板类的隐式实例化

    考虑以下代码片段 template
  • 提起过滤器以强制 ssl

    在 struts 应用程序中 我有一个过滤器 强制只能通过重定向通过 https 访问某些页面 我正在考虑将其移植为 lift 所以我的问题是 在这种环境中 是否有一种 lift 方式来实现此类过滤器 或者它与 struts 中的类似 相同
  • Android:文本视图数组

    我正在制作一个应用程序 我想在其中更改字符串数组中文本视图的文本 为此 我需要制作文本视图数组 如何做到这一点 谁能帮我解决这个问题 您可以像这样创建 TextView int textViewCount 10 TextView textV
  • 使用 ActivityLifecycleCallbacks 自动记录 Android 生命周期事件?

    我正在尝试使用 ActivityLifecycleCallbacks 自动捕获和记录 Android 生命周期事件 但是至少可以说 有关此问题的文档很少 public void registerActivityLifecycleCallba
  • 通知系统设计

    我需要为我们自制的 ERP 系统设计通知系统 当不同的事情发生时 它会向用户发送通知 当前的系统很简单 如果发生了某些事情 例如 用户更改了用户个人资料中的电话号码 则会向会计师发送一封电子邮件 这里有一些缺点 如果用户更改了两次 会计师将
  • Java可扩展枚举

    有没有办法编写一个可以扩展的枚举 我希望有几种方法始终可用于我的枚举 例如 我对数据库字段使用枚举 我在数据库中包含实际的字段名称 public enum ORDERFIELDS OrderID Order ID private Strin
  • 如何在GWT中删除jsarray中的值?

    我有两个问题 1 是否可以使用 pop 方法删除 jsarray 中的任何值或仅删除最后一个值 2 如何从 jsarray 中删除或删除一个值 有人可以发布一个例子吗 这里是这样的 public JsArray
  • Gradle 任务将 Maven 存储库中的 jar 放入项目 lib 文件夹中

    http blog jonasbandi net 2014 03 running nodejs applications on jvm with html http blog jonasbandi net 2014 03 running n
  • 如何从 Android Studio 构建所有产品风格?

    我的 gradle 文件有很多风格 def versionName 1 19 def applicationId com site app productFlavors CafebazarPro applicationId applicat
  • 摆脱 ATLTRACE 输出中显示的 atlTraceGeneral 类别

    升级到 VS2013 后 我开始以 atlTraceGeneral 我的输出 格式接收所有 ATLTRACE2 消息 e g ATLTRACE T This is my data d n 124 显示为 dllmain cpp 1121 a
  • 用于记录方法调用和异常的 WCF 服务属性

    我需要记录 WCF 服务中的每个方法调用以及引发的任何异常 这导致了很多冗余代码 因为每个方法都需要包含类似于这样的样板 OperationContract public ResultBase
  • 用户点击我的 EditText 后如何执行某些操作

    我有一个EditText这显示了时间 用户点击后EditText我想展示一个TimePickerDialog 所以我设置了一个View OnClickListener to my EditText But the OnClickListen
  • git 如何跟踪远程存储库中的版本?

    我的理解是 当进行推送时 远程存储库中的代码会更新 git 实际上如何跟踪发布的版本 在 git flow 的上下文中 远程存储库是否还会随我的代码一起提取任何元数据 还是仅提取代码 我对使用 git flow 比较陌生 它更新远程跟踪分支
  • Jetpack Compose - 文本居中

    我正在使用 Jetpack Compose 创建一个简单的闪存卡 这个想法是 你点击闪存卡 它就会给你答案 但是 我陷入了一个基本问题 不幸的是 我什至找不到官方文档 所以我的学习风格一直信任自动更正系统 无论如何 我认为问题出在 Box
  • 如何正确分割这个字符串列表?

    我有一个这样的字符串列表 z 2 44 4 55 z 88 我怎样才能在列表中拆分这个字符串 使其类似于 z 2 44 4 55 z 88 我尝试过使用split然而 已经有方法将 44 分成 4 和 4 我不知道还能尝试什么 您可以使用正
  • 如何编写Linux驱动模块调用/使用另一个驱动模块?

    我正在开发一个 Linux 驱动程序可加载模块 我必须在我的驱动程序中使用另一个设备 某种驱动程序堆叠在另一个驱动程序上 如何在我的驱动程序中调用 使用其他驱动程序 我认为它们都在内核中 所以可能有一种方法可以直接使用另一个驱动程序 您将需
  • FileStream.close() 不会为其他进程释放文件

    我在 Page Load 调用的函数中有以下代码 启动 Visual Studio 后首次加载页面时 一切正常 但此后对文件的任何其他打开调用都会返回IOException File is in use by another process