I am developing an application in C# (.NET), and am having trouble dealing with file locking.
I have full control of the source of (A) and (B), so I can modify either of them.
How can I stop a user from modifying/deleting a file while application (A) is running, while allowing application (A) to read/write, and application (B) to read?
Use FileShare.Read
to only allow reads from other applications. You can lock the file by having a stream open while the application A runs. You need a NonClosingStreamWrapper
to avoid disposing the stream when you dispose your StreamWriter
(this happens automatically with using
)
NonClosingStreamWrapper
by Jon Skeet can be found from here
When application starts use this to lock the file
FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
When writing to a file use
using (StreamWriter sr = new StreamWriter(new NonClosingStreamWrapper(fileStream)))
{
// File writing as usual
}
When application ends use this to release the file
fileStream.Close();