2009-09-04 7 views
1

J'essaye d'écrire du texte dans le fichier en utilisant StreamWriter et d'obtenir le chemin pour le fichier du dossier sélectionné de FolderDialog. Mon code fonctionne correctement si le fichier n'existe pas déjà. mais si le fichier existe déjà, il lève l'exception que le fichier est utilisé par un autre processus.StreamWriter n'écrit pas dans un fichier existant

using(StreamWriter sw = new StreamWriter(FolderDialog.SelectedPath + @"\my_file.txt") 
{ 
    sw.writeLine("blablabla"); 
} 

Maintenant, si je vous écris comme ceci:

using(StreamWriter sw = new StreamWriter(@"C:\some_folder\my_file.txt") 

il fonctionne très bien avec un fichier existant.

+0

Qu'est-ce FolderDialog.SelectedPath retour ? Est-ce juste "some_folder" ou "c: \ some_folder"? – Sathya

Répondre

0

Ceci est une réponse bon marché, mais avez-vous essayé cette solution de contournement?

string sFileName= FolderDialog.SelectedPath + @"\my_file.txt"; 
using(StreamWriter sw = new StreamWriter(sFileName)) 
{ 
    sw.writeLine("blablabla"); 
} 

L'autre chose que je suggère est de vérifier que FolderDialog.SelectedPath + « \ mon_fichier.txt » est égal au chemin codé en dur de « C: \ some_folder \ mon_fichier.txt ».

0

Vérifiez si le fichier est effectivement utilisé par un autre processus.

Pour ce faire, exécutez Process Explorer, appuyez sur Ctrl + F, tapez le nom de fichier et cliquez sur Rechercher.

En aparté, la meilleure façon d'accomplir cette tâche est comme ceci:

using(StreamWriter sw = File.AppendText(Path.Combine(FolderDialog.SelectedPath, @"my_file.txt"))) 

EDIT: Est-ce que PAS mettre une barre oblique dans le second argument Path.Combine.

0

Le fichier est déjà utilisé, il ne peut donc pas être écrasé. Cependant, notez que ce message n'est pas toujours entièrement exact - le fichier peut en fait être utilisé par votre propre processus. Vérifiez vos habitudes d'utilisation.

2

Cela peut avoir à faire avec la façon dont vous combinez votre chemin et votre nom de fichier. Donnez à ce essayer:

using(StreamWriter sw = new StreamWriter(
    Path.Combine(FolderDialog.SelectedPath, "my_file.txt")) 
{ 
    sw.writeLine("blablabla"); 
} 

En outre, vérifiez que la valeur FolderDialog.SelectedPath n'est pas vide. :)

0

Essayez cette

using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt")) 
    { 
      sw.writeLine("blablabla"); 
    } 

il ne fonctionnera que dans le fichier existant, afin de valider si le fichier est nouveau ou existe déjà, faire quelque chose comme

string path = @"C:\some_folder\my_file.txt"; 
     if (!File.Exists(path)) 
     { 
      // Create a file to write to. 
      using (StreamWriter sw = File.CreateText(path)) 
      { 
       //once file was created insert the text or the columns 
       sw.WriteLine("blbalbala"); 

      } 
     } 
     // if already exists just write 
using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt")) 
    { 
      sw.writeLine("blablabla"); 
    } 
Questions connexes