2009-03-03 15 views
60

Voglio leggere e scrivere su un file. Questo non funziona.Come leggere e scrivere un file in C#

static void Main(string[] args) 
{ 
    StreamReader sr = new StreamReader(@"C:\words.txt"); 
    StreamWriter sw = new StreamWriter(@"C:\words.txt"); 
} 

Come posso leggere e scrivere su un file in C#?

risposta

68

È necessario un singolo flusso, aperto sia per la lettura che per la scrittura.

FileStream fileStream = new FileStream(
     @"c:\words.txt", FileMode.OpenOrCreate, 
     FileAccess.ReadWrite, FileShare.None); 
+10

FileShare.ReadWrite non è necessario ed è probabilmente non suscettibile di gestione, consentirà ad altre applicazioni di leggere e scrivere il file mentre lo si utilizza. Generalmente FileShare.None è preferito quando si scrive su un file, per impedire ad altri di accedere a un file mentre ci si lavora. – ScottS

+0

@ScottS: Sono d'accordo per quanto è necessario il ReadWrite in quanto è possibile consentire al costruttore di capire la modalità di condivisione. – Samuel

+2

Ometti l'ultimo ')' – user194743

30
var fs = File.Open("file.name", FileMode.OpenOrCreate, FileAccess.ReadWrite); 
var sw = new StreamWriter(fs); 
var sr = new StreamReader(fs); 

... 

fs.Close(); 
//or sw.Close(); 

La cosa fondamentale è quello di aprire il file con il flag FileAccess.ReadWrite. È quindi possibile creare qualsiasi Stream/String/Lettore/Scrittore binario necessario utilizzando il FileStream iniziale.

60

Non dimenticare la strada più facile:

static void Main(string[] args) 
    { 
     var text = File.ReadAllText(@"C:\words.txt"); 
     File.WriteAllText(@"C:\words.txt", text + "DERP"); 
    } 
+13

@Copperpot: controlla i requisiti della domanda. Non dice nulla sul blocco. Inoltre, non dice nulla su crash del disco rigido o interruzioni di meteora che si interrompono. – Will

+1

Penso che la domanda implichi "allo stesso tempo". –

+3

@JohnAtwood Sai cosa dicono delle ipotesi. Non ha mai selezionato una risposta corretta, quindi non lo sapremo mai * veramente *. – Will

1

Questo thread sembra rispondere alla tua domanda: simultaneous-read-write-a-file

In sostanza, ciò che è necessario è quello di dichiarare due FileStream, uno per le operazioni di lettura, l'altra per operazioni di scrittura. Il writer Filestream deve aprire il file in modalità 'Aggiungi'.

Problemi correlati