tags:

views:

1007

answers:

3

I'm trying to set flag that causes the "Read Only" check box to appear when you right click \ Properties on a file.

Thanks!

A: 

c# :

File.SetAttributes(filePath, FileAttributes.Normal);

File.SetAttributes(filePath, FileAttributes.ReadOnly);

+14  A: 

Two ways:

System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
fileInfo.IsReadOnly = true/false;

or

File.SetAttributes(filePath, FileAttributes.ReadOnly/FileAttributes.Normal);

The IsReadOnly property on FileInfo essentially does the bit-flipping you would have to do manually in the second method.

Rex M
Amazing how fast you can get an answer around here. I love this site!
JimDel
I didn't realize you could use the first method. Awesome!
Mike C.
So easy, thank guys!
will
Note that this will effectively clear out the other flags on the same file at the same time. A hidden file will become visible, a system-file will become non-system, etc.
Lasse V. Karlsen
@Lasse the second method will, if someone does not understand how bit flags work. Thankfully you explained it already.
Rex M
+5  A: 

To set the read-only flag, in effect making the file non-writeable:

File.SetAttributes(filePath,
    File.GetAttributes(filePath) | FileAttributes.ReadOnly);

To remove the read-only flag, in effect making the file writeable:

File.SetAttributes(filePath,
    File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);

To toggle the read-only flag, making it the opposite of whatever it is right now:

File.SetAttributes(filePath,
    File.GetAttributes(filePath) ^ FileAttributes.ReadOnly);

This is basically bitmasks in effect. You set a specific bit to set the read-only flag, you clear it to remove the flag.

Note that the above code will not change any other properties of the file. In other words, if the file was hidden before you executed the above code, it will stay hidden afterwards as well. If you simply set the file attributes to .Normal or .ReadOnly you might end up losing other flags in the process.

Lasse V. Karlsen