gpt4 book ai didi

c# - FileStream 锁定文件以进行读写

转载 作者:太空狗 更新时间:2023-10-29 21:09:40 25 4
gpt4 key购买 nike

我有以下代码块,这让我很头疼。

逻辑上它应该工作,因为我正在使用在 using 语句中提供锁的文件流。当它到达创建 StreamWriter 的行时,它失败并提示“该文件不可写”。

现在我的程序是一个多线程应用程序。任何线程都可能试图写入此文件。我需要程序锁定文件、读取内容、检查内容,然后写回任何更改。在此过程中,没有其他线程应该能够访问该文件。

using (var fs = File.Open(fileLoc, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
var sr = new StreamReader(fs);
var str = sr.ReadToEnd();
var strArray = str.Split(',');
if (strArray.Any(st => st == text))
{
return;
}
sr.Close();

var sw = new StreamWriter(fs);
sw.Write(str + text);
sw.Flush();
sw.Close();
}

最佳答案

FileShare.None 标志不会导致线程排队,它只是锁定文件,因此会出现异常。要提供互斥访问,您可以在写入之前锁定共享对象。

但是你说“现在我的程序是一个多线程应用程序。任何线程都可能试图写入这个文件。”现在,这些线程是否都使用完全相同的方法写入文件?让我们假设他们这样做,那么这应该有效......

创建一个静态类变量...

private static object lockObject = new object();

在这里使用它......

lock (lockObject) 
{
using(var sw = new StreamWriter(fs))
{
sw.Write(str + text);
}
}

我对线程做了一些假设,所以如果这不起作用,您可能需要查找有关同步的信息,或者向我们提供更多信息。

此外,请提前关闭您的StreamReader(以防该方法提前返回)。使用后立即关闭它,或者最好使用 using

关于c# - FileStream 锁定文件以进行读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698380/

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