2009-07-29 2 views
31

Я пытаюсь установить флаг, который вызывает флажок Read Only, когда вы укажете right click \ Properties на файл.Лучший способ сделать файл доступным для записи в C#

Спасибо!

+0

Вы пытаетесь сделать файл только для чтения, по вашему вопросу или записям (не только для чтения), по вашему типу вопроса? –

+0

Это сложная проблема для ОС на базе Win2k. Существует атрибут «только для чтения», который вы можете предоставить файлу, а также есть разрешение на запись, которое предоставляется через вкладку «Разрешения». Первое - это просто предложение, где последняя фактически применяется операционной системой. – Armentage

+0

@Armentage Я не думаю, что это так сложно. Существует четкое различие между файловыми флагами и наборами разрешений NTFS, и этот вопрос явно касается первого случая. –

ответ

59

Два способа:

System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); 
fileInfo.IsReadOnly = true/false; 

или

// Careful! This will clear other file flags e.g. FileAttributes.Hidden 
File.SetAttributes(filePath, FileAttributes.ReadOnly/FileAttributes.Normal); 

IsReadOnly свойство на FileInfo по существу делает бит листать вам придется делать вручную во втором методе.

+0

Удивительно, как быстро вы можете получить ответ здесь. Мне нравится этот сайт! – JimDel

+0

Я не знал, что вы можете использовать первый метод. Потрясающие! –

+0

Так просто, спасибо, ребята! – will

0

C#:

File.SetAttributes (Filepath, FileAttributes.Normal);

File.SetAttributes (filePath, FileAttributes.ReadOnly);

33

Чтобы установить флаг только для чтения, в действительности делает файл не-доступным для записи:

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

К удалить флаг только для чтения, в действительности делает файл доступным для записи:

File.SetAttributes(filePath, 
    File.GetAttributes(filePath) & ~FileAttributes.ReadOnly); 

Для переключения флаг только для чтения, что делает его противоположное то, что это прямо сейчас:

File.SetAttributes(filePath, 
    File.GetAttributes(filePath)^FileAttributes.ReadOnly); 

В основном это битмаски. Вы устанавливаете определенный бит, чтобы установить флаг только для чтения, вы очищаете его, чтобы удалить флаг.

Обратите внимание, что приведенный выше код не изменит никаких других свойств файла. Другими словами, если файл был скрыт до того, как вы выполнили вышеуказанный код, он также останется скрытым. Если вы просто установите атрибуты файла .Normal или .ReadOnly, вы можете потерять другие флаги в этом процессе.

+0

imho это лучший способ. – Kevin