相关疑难解决方法(0)

System.IO.File帮助方法的"顺序"文件I/O是否安全?

我刚看到这个问题:在C#中对File类使用静态方法是否安全?.总结一下IOException,在这个ASP.NET代码片段中,OP有一个因为文件正在使用:

var text= File.ReadAllText("path-to-file.txt");
// Do something with text
File.WriteAllText("path-to-file.txt");
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是,由于多个ASP.NET重叠请求,这是一个简单的并发访问问题.我要解决的问题是将I/O集中到同步的线程安全类中(或者删除文件以支持其他内容).我读了两个答案,当我即将向其中一个人投票时,我看到那些用户是谁,我想到了什么,并且停止了.

我会引用它们两者(然后请参阅原始答案以获取更多背景信息).

对于这个OP段:

我猜测文件读取操作有时不会在写操作发生之前关闭文件[...]

答案说:

正确.文件系统不支持原子更新[...]使用FileStream没有帮助[...]文件里面没有魔法.它只是为了您的方便而使用FileStream包装.

但是我没有看到任何期望的原子操作(读取+后续写入)和并行(因为部分重叠的多线程请求)可能导致并发访问.即使是原子 I/O操作(读/写)也会有完全相同的问题.OK FileStream 可以是异步的,但它不是如何File.ReadAllText()File.WriteAllText()使用它.

另一个答案使我更加困惑,它说:

虽然根据文档,该方法保证文件句柄被关闭,但即使引发异常,也不能保证在方法返回之前发生关闭的时间:关闭可以异步完成.

什么?MSDN说方法将打开,读取和关闭文件(如果是异常).这种方法是否有可能异步关闭文件?OS会推迟CloseHandle()吗?在哪些情况下?为什么?

简而言之:它只是一种误解还是CloseHandle()异步?我错过了一些非常重要的东西?

.net c# io

14
推荐指数
1
解决办法
427
查看次数

标签 统计

.net ×1

c# ×1

io ×1