2011-11-10 7 views
16

Se File.SetAttributes("C:\\myFile.txt", FileAttributes.ReadOnly); imposta un file in sola lettura, come posso impostarlo di nuovo in lettura/scrittura se è necessario?C# crea file di lettura/scrittura da sola lettura

Ho il sospetto che sarebbe FileAttributes.Normal tuttavia questo cambierà altre proprietà del file? Non c'è una nota terribilmente descrittiva sul sito MSDN ...

Il file è normale e non ha altri attributi impostati. Questo attributo è valido solo se utilizzato da solo.

Grazie

risposta

36

Per rimuovere solo l'attributo ReadOnly, si farebbe qualcosa di simile:

File.SetAttributes("C:\\myfile.txt", File.GetAttributes("C:\\myfile.txt") & ~FileAttributes.ReadOnly); 

Questo rimuoverà l'attributo ReadOnly, ma conservano qualsiasi altro attributo che già esistono sul file.

+0

Sto indovinando '~' inverte l'attributo? –

+2

Praticamente - l'operatore '~' restituisce un complemento bit per bit di un dato valore. Semanticamente, quello che sopra dice, "Imposta gli attributi del file' myfile.txt' sugli attributi di 'myfile.txt' * tranne per l'attributo ReadOnly *." – matt

+0

ok geniale! :) grazie –

8

File.SetAttributes sostituisce TUTTI gli attributi sul file.

Il modo corretto per impostare e rimuovere gli attributi è innanzitutto ottenere gli attributi, applicare le modifiche e impostarle.

ad es.

var attr = File.GetAttributes(path); 

// set read-only 
attr = attr | FileAttributes.ReadOnly; 
File.SetAttributes(attr); 

// unset read-only 
attr = attr & ~FileAttributes.ReadOnly; 
File.SetAttributes(attr);