.Net中使文件变成只读文件
技巧
可以使用定义在File类中的SetAttributes方法或定义在FileInfo类中的Attributes属性来更改文件的各种特性,其中一个特性是只读特性。要仅仅更改只读特性而不影响其他的任何特性,则对文件当前的特性和想要更改的特性使用按位操作符。例如:要使文件变成只读的,则要使用逻辑或(|)运算符,如下:
File.SetAttributes(filename,File.GetAttributes(fileName)|FileAttributes.ReadOnly);
如果要删除文件的只读特性,则应该对当前的文件特性和FileAttributes.ReadOnly值按位补执行逻辑与(&)运算。按位补运算就是代字号(~)字符:
File.SetAttributes(filename,File.GetAttributes(fileName)&(~FileAttributes.ReadOnly));
注释:
FileAttributes枚举数据类型包含与整数的单个位对应的值。换句话来说,值1对应于ReadOnly,2对应于Hidden特性,4表示System文件等。如果要对文件设置某种特性当时不影响已设置或清零的其他任何特性,则可以简单地将要设置的特性和当前的特性列表示进行逻辑或。例如:如果文件设置了它们的Hidden特性,并且还要将它设置为只读,那么使用前面展示的代码。如果将这些值看作位,则会看到以下内容:
0 0 1 1 = 当前内容
0 0 0 1 = FileAttributes.ReadOnly
0 0 1 1 = 当前 | ReadOnly
注意如果 Hidden特性最初值为0,那么它仍然为0,因为0|0 = 0.然后,如果是FileAttibutes.Hidden值变为0,首先必须使用FileAttributes.Hidden值得按位补,并将它和当前的属性列表进行逻辑或(&)。按位补是将所有的1更改为0并将所有0变成1的结果:
0 0 1 1 = 当前特性
1 1 0 1 = FileAttributes.Hidden的当前特性
0 0 0 1 = 当前和Hidden取补
尽管可以对.Net框架中其他任何枚举数据类型使用这项技术,但是必须确表枚举的值遵守为标志模式。如果值不属于2的n次方范围,那必须采用不同的方法。