2013-02-08 14 views
5

Fondamentalmente voglio creare un file se non esistenti poi scrivere un messaggio ad esso.Il processo non può accedere al file quando si usa StreamWriter

if (!File.Exists(filePath + fileName)) 
    File.Create(filePath + fileName); 
StreamWriter sr = new StreamWriter(filePath + fileName,false); 

Come gestire questo errore?

Il processo non può accedere al file 'c: \ blahblah' perché è utilizzato da un altro processo.

risposta

14

File.Create apre una FileStream (http://msdn.microsoft.com/en-us/library/d62kzs03.aspx).

Come non hai smaltire esso, il file rimane bloccato e successive accessi al file non riuscirà a causa di questa situazione, se le stesse vengano effettuate da altre maniglie (vale a dire altro FileStream o l'intero StreamWriter).

Questo codice illustra come si dovrebbe lavorare con IDisposable oggetti come FileStream:

if (!File.Exists(filePath + fileName)) 
{ 
    File.Create(filePath + fileName).Dispose(); 

    using(StreamWriter sr = new StreamWriter(filePath + fileName,false)) 
    { 

    } 
} 
+2

Perché perdere tempo con File.Create allora? Basta passare il percorso al file al costruttore di StreamWriter ed evitare di creare l'oggetto extra che non si usa. –

+0

@ChrisDunaway Sì, assolutamente, ma stavo rispondendo a "il motivo per cui la seconda parte non può accedere al file?". Sai. –

3

perché non utilizzare il StreamWriter costruttore che prende nel nome del file?

StreamWriter sr = new StreamWriter(filePath + fileName); 

Da MSDN:

Il parametro path può essere un nome di file, tra cui un file in una condivisione Universal Naming Convention (UNC). Se il file esiste, viene sovrascritto; in caso contrario, viene creato un nuovo file.

molto minore punto, ma si potrebbe considerare l'utilizzo di Path.Combine quando concatenando i nomi di file e percorsi delle cartelle.

+0

Devo prima crearlo e assicurarmi che esista o no? –

+0

Hai letto la citazione? 'Se il file esiste, viene sovrascritto; altrimenti, ** viene creato un nuovo file **. ' –

2

semplificare il codice utilizzando il metodo unico per creare e aprire un file:

using (FileStream fs = File.OpenWrite(path)) 
{ 
    Byte[] info = new UTF8Encoding(true) 
         .GetBytes("This is to test the OpenWrite method."); 

    fs.Write(info, 0, info.Length); 
} 

MSDN: (File.OpenWrite Method)

Apre un file esistente o crea un nuovo file per la scrittura.

+0

Questo dovrebbe avere più upvotes. – Rob

Problemi correlati