2009-07-29 14 views
31

Próbuję ustawić flagę, która powoduje, że pole wyboru Read Only pojawia się, gdy right click \ Properties na pliku.Najlepszy sposób na zapisanie pliku w C#

Dzięki!

+0

Czy próbujesz zrobić plik tylko do odczytu, według swojego pytania lub do zapisania (nie tylko do odczytu), na swoje pytanie tytułowe? –

+0

Jest to skomplikowany problem na systemach opartych na Win2k. Istnieje atrybut "tylko do odczytu", który możesz nadać plikowi, a także uprawnienia do zapisu, które są przyznawane za pomocą karty "Uprawnienia". Ta pierwsza to tylko sugestia, w której to drugie jest faktycznie egzekwowane przez system operacyjny. – Armentage

+0

@Armentage Nie sądzę, że to takie skomplikowane. Istnieje wyraźne rozróżnienie między flagami plików i zestawami uprawnień NTFS, a to pytanie wyraźnie dotyczy pierwszego przypadku. –

Odpowiedz

59

dwa sposoby:

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

lub

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

Obiekt IsReadOnly na FileInfo zasadniczo robi nieco Rzut trzeba by zrobić ręcznie w drugiej metodzie.

+0

Zadziwiające, jak szybko można uzyskać odpowiedź tutaj. Kocham tę stronę! – JimDel

+0

Nie wiedziałem, że możesz użyć pierwszej metody. Niesamowite! –

+0

Tak łatwo, dzięki chłopaki! – will

0

C#

File.SetAttributes (ścieżkę np FileAttributes.Normal);

File.SetAttributes (filePath, FileAttributes.ReadOnly);

33

Aby ustawić flagę read-only, nadając tym samym pliku non zapisywalny:

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

Do usunąć flagę read-only, nadając tym zapis do pliku:

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

Aby kolanowej flagi tylko do odczytu, dzięki czemu stanowi przeciwieństwo cokolwiek to jest teraz:

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

Zasadniczo jest to maska ​​bitmaskowa. Ustawiłeś określony bit, aby ustawić flagę tylko do odczytu, wyczyścisz ją, aby usunąć flagę.

Należy zauważyć, że powyższy kod nie zmieni żadnych innych właściwości pliku. Innymi słowy, jeśli plik został ukryty przed wykonaniem powyższego kodu, również pozostanie ukryty. Jeśli po prostu ustawisz atrybuty pliku na .Normal lub .ReadOnly, możesz stracić inne flagi w procesie.

+0

imho to najlepsza metoda. – Kevin