Установить атрибуты файла для файла только для чтения в c # - PullRequest
0 голосов
/ 04 сентября 2018

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

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

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

...