Установить атрибуты файла для файла только для чтения в C#

У меня есть файл на диске. Я хочу проверить, если это только для чтения. Если да, я хочу сделать его доступным для записи. Внесите изменения и сохраните их. И изменить его обратно только для чтения. Для этого я пытаюсь выполнить приведенный ниже код в 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 ответ

Это только предположение, однако ваша проблема вероятна, потому что вы устанавливаете и получаете атрибуты для разных файлов. Т.е. 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);

также, да, убедитесь, что дескриптор файла закрыт, как упомянуто в комментариях, это может быть нарушителем (неизвестно)

Другие вопросы по тегам