我在磁盘上有一个文件。我想检查它是否为只读。如果是,我想使其可写。进行修改并保存。并将其更改回只读。 为此,我尝试在c#中执行以下代码。它删除了readonly属性,并让我编写和保存修改。但是,它无法将其设置回只读状态。
感谢您的帮助。
public class Test
{
public static void Main(string[] args)
{
//This is a readonly file
string path = @"c:\temp\MyTest.txt";
FileAttributes initialattributes = File.GetAttributes(modelFilename);
if ((initialattributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
//Removing the readonly attribute
initialattributes = RemoveAttribute(initialattributes, FileAttributes.ReadOnly);
File.SetAttributes(path, initialattributes);
//Performing some write operation and saving file
//Trying to set the attribute back to readonly but its not working
File.SetAttributes(path, File.GetAttributes(modelFilename) | FileAttributes.ReadOnly);
}
}
private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
{
return attributes & ~attributesToRemove;
}
}
答案 0 :(得分:2)
这只是一个猜测,但是您可能会遇到问题,因为您正在不同文件上设置和获取属性。即path
和modelFilename
File.SetAttributes(path, File.GetAttributes(modelFilename) | FileAttributes.ReadOnly);
为什么这些名称不同?为什么不尝试
File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.ReadOnly);
甚至只是一个测试
File.SetAttributes(path, FileAttributes.ReadOnly);
尽管在阅读代码时仍不清楚您对modelFilename
和initialattributes
的处理方式,以及为什么它与path
不同,以及为什么不能直接调用
File.SetAttributes(path, initialattributes);
此外,是的,请确保按注释中所述关闭文件句柄,这可能会破坏交易(未知)