gpt4 book ai didi

c# - 同时读取和写入文件

转载 作者:太空狗 更新时间:2023-10-29 18:13:34 24 4
gpt4 key购买 nike

对于使用文件作为公司设备保留的某种全局存储的应用程序,我需要一种读取和写入文件的方法(或锁定文件、读取文件、写入文件和解锁文件) ).一小段代码就能表达我的意思:

FileStream in = new FileStream("storage.bin", FileMode.Open);
//read the file
in.Close();

//!!!!!
//here is the critical section since between reading and writing, there shouldnt
//be a way for another process to access and lock the file, but there is the chance
//because the in stream is closed
//!!!!!
FileStream out = new FileStream("storage.bin", FileMode.Create);
//write data to file
out.Close();

这应该是这样的

LockFile("storage.bin");
//read from it...
//OVERwrite it....
UnlockFile("storage.bin");

该方法应该是绝对安全的,因为该程序应该同时在 2000 台设备上运行

最佳答案

简单地保持 FileStream 以独占(非共享)访问打开将阻止其他进程访问该文件。这是打开文件进行读/写访问时的默认设置。

您可以通过截断当前打开的文件来“覆盖”它。

所以:

using (var file = File.Open("storage.bin", FileMode.Open))
{
// read from the file

file.SetLength(0); // truncate the file

// write to the file
}

the method should be absolute safe, since the program should run on 2000 devices at the same time

根据您写入文件的频率,这可能会成为瓶颈。您可能想对此进行测试,看看它的可扩展性如何。

此外,如果其中一个进程试图与另一个进程同时对文件进行操作,则会抛出 IOException。没有真正“等待”文件的方法,因此您可能希望以更有序的方式协调文件访问。

关于c# - 同时读取和写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11627276/

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