我有一个函数正在读取文件并在列表中添加一些字符串并返回此列表。因为我希望没有人也没有任何东西可以改变、删除或任何我正在阅读的当前文件,所以我锁定了它。一切都很好,我以某种方式做到了:
public static List<string> Read(string myfile)
{
using (FileStream fs = File.Open(myfile, FileMode.Open, FileAccess.Read, FileShare.None))
{
//read lines, add string to a list
//return list
}
}
没关系。现在我在另一个类中有另一个函数,它正在处理列表并调用其他函数等等。现在有时我想移动我正在阅读的文件。这就是问题所在:因为我现在在一个新函数中并且该函数Read(string myfile)
已经被处理,所以文件中没有更多的锁。
//in another class
public static void DoStuff(/*somefile*/)
{
List<string> = Read(/*somefile*/);
//the file (somefile) is not more locked!
//do stuff
if (something)
Move(/*somefile*/) //could get an error, file maybe not more there or changed...
}
所以另一个函数/用户可以更改文件,重命名它,删除它或其他任何东西=>我无法移动这个文件。或者我将移动更改的文件,但我不知道那是什么。如果我使用线程,另一个具有相同功能的线程可以再次锁定文件,我无法移动它。
这就是为什么我需要将这个文件锁定更长的时间。有没有简单的方法?还是我必须更换我的using (FileStream fs = File.Open(myfile, FileMode.Open, FileAccess.Read, FileShare.None)
代码?有什么建议么?谢谢你