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