Prevent a user from deleting, moving or renaming a file

烈酒焚心 提交于 2020-01-21 04:16:28

问题


What I am trying to do is while my program is using a file, I want to keep the user from renaming, deleting, or moving the file (well... a move is a delete and a create at a different location according to Windows FileSystemWatcher, but I digress).

It has been suggested that I use FileStream.Lock or use a Mutex. However, FileStream.Lock seems only to prevent the file from being modified which I am trying to allow. Also, I am very unsure as to if a mutex can lock a file, although I am still reading on it with in the .Net 4.0 library.

Does anyone have any advice on utilizing either one and if there is a code based solution to this problem?


回答1:


When you are opening the file, you can specify the sharing mode.

Opening the file with FileAccess.Read gives you the ability to read the file, while FileShare.ReadWrite allows the file to continue to be edited, but not deleted or moved.

var fs = File.Open(@"C:\temp\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
MessageBox.Show("File Locked");  // While the messagebox is up, try to open or delete the file.
// Do your work here
fs.Close();



回答2:


This will prevent moving or deleting the file but allows read and write:

    using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        // Do Stuff.
    }

FileStream.Lock is actually a range lock which prevents modification of a particular portion of a file while the lock is held.



来源:https://stackoverflow.com/questions/11318663/prevent-a-user-from-deleting-moving-or-renaming-a-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!