Tag: 同步文件

如何锁定文件并在写入时避免读数

我的Web应用程序从文件系统返回一个文件。 这些文件是动态的,所以我无法知道它们中有多少个。 当该文件不存在时,应用程序将从数据库创建该文件。 我想避免两个不同的线程同时重新创建相同的文件,或者一个线程尝试返回该文件,而其他线程正在创建它。 此外,我不想锁定所有文件常见的元素。 因此,我应该在创建文件时锁定文件。 所以我想锁定一个文件,直到它的重新创建完成,如果其他线程试图访问它…它将不得不等待文件被解锁。 我一直在阅读关于FileStream.Lock,但我必须知道文件长度,它不会阻止其他线程尝试读取文件,因此它不适用于我的特定情况。 我一直在阅读有关FileShare.None的内容,但是如果其他线程/进程尝试访问该文件,它会抛出一个exception(哪个exception类型?)所以我应该开发一个“在故障时再试一次”,因为我我想避免exception生成……我不太喜欢这种方法,尽管可能没有更好的方法。 使用FileShare.None的方法或多或少会: static void Main(string[] args) { new Thread(new ThreadStart(WriteFile)).Start(); Thread.Sleep(1000); new Thread(new ThreadStart(ReadFile)).Start(); Console.ReadKey(true); } static void WriteFile() { using (FileStream fs = new FileStream(“lala.txt”, FileMode.Create, FileAccess.Write, FileShare.None)) using (StreamWriter sw = new StreamWriter(fs)) { Thread.Sleep(3000); sw.WriteLine(“trolololoooooooooo lolololo”); } } static void ReadFile() { Boolean readed […]