gpt4 book ai didi

c# - File.WriteAllBytes 不阻塞

转载 作者:行者123 更新时间:2023-11-30 14:33:20 42 4
gpt4 key购买 nike

我有一段像这样的简单代码:

File.WriteAllBytes(Path.Combine(temp, node.Name), stuffFile.Read(0, node.FileHeader.FileSize));

人们会认为 WriteAllBytes 会是一个阻塞调用,因为它在 C# 5.0 中有 Async 对应项,并且它在任何 MSDN 文档中都没有声明它是非阻塞的。但是,当文件大小合理(不是很大,但在 20mb 左右)时,之后打开文件的调用似乎在写入完成之前被调用,并且文件被打开(程序提示它已损坏,正确的)并且 WriteAllBytes 然后提示文件在另一个进程中打开。这里发生了什么?!出于好奇,这是用于打开文件的代码:

System.Diagnostics.Process.Start(Path.Combine(temp, node.Name));

有没有人经历过这种奇怪的事情?还是我是金发女郎做错了什么?

如果它确实阻塞了,可能是什么导致了这个问题?

编辑:我会把完整的方法放上来。

var node = item.Tag as FileNode;
stuffFile.Position = node.FileOffset;
string temp = Path.GetTempPath();
File.WriteAllBytes(Path.Combine(temp, node.Name), stuffFile.Read(0, node.FileHeader.FileSize));
System.Diagnostics.Process.Start(Path.Combine(temp, node.Name));

似乎正在发生的事情是 Process.StartWriteAllBytes 完成之前被调用,它试图打开文件,然后 WriteAllBytes 提示另一个进程持有该文件的锁。

最佳答案

不,WriteAllBytes 是一种阻塞的同步方法。正如您所说,如果不是,文档会这样说。

可能病毒扫描程序仍在忙于扫描您刚刚写入的文件,并负责锁定该文件。尝试暂时禁用扫描仪来检验我的假设。

关于c# - File.WriteAllBytes 不阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746529/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com