In C#, if 2 processes are reading and writing to the same file, what is the best way to avoid process locking exceptions?

前端 未结 8 1981
甜味超标
甜味超标 2020-12-13 04:25

With the following file reading code:

using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
    using (T         


        
8条回答
  •  佛祖请我去吃肉
    2020-12-13 05:04

    You can open a file for writing and only lock write access, thereby allowing others to still read the file.

    For example,

    using (FileStream stream = new FileStream(@"C:\Myfile.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
    {
       // Do your writing here.
    }
    

    Other file access just opens the file for reading and not writing, and allows readwrite sharing.

    using (FileStream stream = new FileStream(@"C:\Myfile.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
       // Does reading  here.
    }
    

    If you want to ensure that readers will always read an up-to-date file, you will either need to use a locking file that indicates someone is writing to the file (though you may get a race condition if not carefully implemented) or make sure you block write-sharing when opening to read and handle the exception so you can try again until you get exclusive access.

提交回复
热议问题