在c#

时间:2018-09-04 09:06:06

标签: c# setattribute

我在磁盘上有一个文件。我想检查它是否为只读。如果是,我想使其可写。进行修改并保存。并将其更改回只读。 为此,我尝试在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;
   }

}

1 个答案:

答案 0 :(得分:2)

这只是一个猜测,但是您可能会遇到问题,因为您正在不同文件上设置和获取属性。即pathmodelFilename

File.SetAttributes(path, File.GetAttributes(modelFilename) | FileAttributes.ReadOnly);

为什么这些名称不同?为什么不尝试

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

甚至只是一个测试

File.SetAttributes(path,  FileAttributes.ReadOnly);

尽管在阅读代码时仍不清楚您对modelFilenameinitialattributes的处理方式,以及为什么它与path不同,以及为什么不能直接调用

File.SetAttributes(path, initialattributes);

此外,是的,请确保按注释中所述关闭文件句柄,这可能会破坏交易(未知)