2016-06-30 4 views
1

Ich habe versucht, dies zu schreiben, um meine Ordner aufzulisten, der Append-Teil funktioniert nicht und es schreibt das ganze Ding, auch wenn Ich versuche, etwas anderes aufzulisten, ohne die App zu verlassen. Es gibt den Fehler "Datei wird verwendet", der für mich keinen Sinn ergibt, weil ich am Ende jeder Schleife close() verwendet habe.C# Die Datei verwendet auch mit close(), append funktioniert nicht

Ich habe fast alle Microsoft-Dokumente und viele Beiträge hier überprüft, konnte aber meine Antwort nicht finden.

The Picture that shows the Error I get

Vielen Dank im Voraus!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace Anime_Lister 
{ 
    public partial class Anime0Lister : Form 
    { 


     public void Appen() 
     { 
      using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true)) 
      { 


       DirectoryInfo directory = new DirectoryInfo(path0tb.Text); 

       DirectoryInfo[] directory0Arr = directory.GetDirectories(); 

       foreach (DirectoryInfo dir in directory0Arr) 
       { 
        String Parent = Convert.ToString(dir.Parent); 
        String Name = Convert.ToString(dir.Name); 
        String Root = Convert.ToString(dir.Root); 


        File.AppendAllText(path0save.Text, Parent); 
        File.AppendAllText(path0save.Text, " || "); 
        File.AppendAllText(path0save.Text, Name + System.Environment.NewLine); 
        File.AppendAllText(path0save.Text, Root + System.Environment.NewLine); 


       } 

      } 
     } 

     public void Writer() 
     { 

      using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text)) 
      { 

       DirectoryInfo directory = new DirectoryInfo(path0tb.Text); 

       DirectoryInfo[] directory0Arr = directory.GetDirectories(); 

       foreach (DirectoryInfo dir in directory0Arr) 
       { 
        String Parent = Convert.ToString(dir.Parent); 
        String Name = Convert.ToString(dir.Name); 
        String Root = Convert.ToString(dir.Root); 

        file.Write(Parent); 
        file.Write(" || "); 
        file.WriteLine(Name); 

        file.WriteLine(Root); 




       } 

      } 



     } 


     public void Browser() 
     { 

      FolderBrowserDialog address = new FolderBrowserDialog(); 
      if (address.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       path0tb.Text = address.SelectedPath; 



     } 

     public void Browser2() 
     { 

      if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       path0save.Text = saveFileDialog1.FileName; 
      } 



     } 

     public Anime0Lister() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //_____________________________________________________________List 







      { 

       try 
       { 


        if (existing0file.Checked == true) 
        { 
         Appen(); 
        } 
        else 
        { 
         Writer(); 
        }  

       } 


       catch (Exception Fail) 
       { 
        MessageBox.Show(Fail.Message); 


       } 



      } 

     } 


    } 
} 
+1

sind Sie falsche Methode? Nicht "File.AppendAllText" aber "file.Write"? –

+0

obendrauf in einer anderen Funktion mit dem file.appedalltext –

+0

wenn ja, dann müssen Sie "Datei" an diese Funktion übergeben. Sonst wie willst du es an eine Datei anhängen? Wahrscheinlich erstellen Sie die Datei jedes Mal neu. –

Antwort

4

Einweg-Objekt wie ein StreamWriter immer in einer Using-Anweisung eingeschlossen werden soll, um sicher zu sein, dass auch im Fall einer Ausnahme wird das Objekt geschlossen und seine nicht verwalteten Ressourcen für die Wiederverwendung freigegeben. Die Sprache gibt Ihnen eine spezifische Aussage dazu, (Using Stetement), aber in Ihrem speziellen Fall, wenn Sie eine Datei mit einer StreamWriter öffnen, dann können Sie die File.AppendAllText nicht verwenden, da diese Methode versucht, die Datei zu öffnen und sie zu finden verwenden‘von der vorherigen geöffnet Stream

public void Appen() 
    { 
     using(System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true)) 
     { 
      DirectoryInfo directory = new DirectoryInfo(path0tb.Text); 
      DirectoryInfo[] directory0Arr = directory.GetDirectories(); 

      foreach (DirectoryInfo dir in directory0Arr) 
      { 
       // No need for those Convert.ToString. 
       // The DirectoryInfo properties used are already strings. 

       file.Write(dir.Parent); 
       file.Write(" || "); 
       file.WriteLine(dir.Name); 
       file.WriteLine(dir.Root); 

       // or just in one line 
       //file.WriteLine(string.Concat(dir.Parent, 
       //      " || ", 
       //      dir.Name, 
       //      Environment.NewLine, 
       //      dir.Root)); 

      } 
     } 
    } 

die Verwendung derselben Anweisung sollte auf die Writer-Methode angewendet werden ...

+0

danke, dass du dir Zeit genommen hast und meine Frage beantwortet hast, aber ich bekomme immer noch denselben Fehler, der mir sagt, dass die Datei von einem anderen Prozess verwendet wird! (Ich habe es tatsächlich für append Teil verwendet) –

+0

Ich habe diesen Code getestet und gibt keinen Fehler dieser Art, also vielleicht ist das Problem woanders. (Auch wenn die beiden Textfelder auf denselben Ordner zeigen) Sind Sie sicher, dass das erste Textfeld einen Dateinamen und keinen Ordnernamen enthält? (wenn auch die Ausnahme ist anders) – Steve

+0

hinzugefügt einen Link zu einem Bild, das das Problem zeigt, änderte auch den Code auf den vollen Code ich benutze im Moment (noch einmal vielen Dank) Ich konzentriere mich hauptsächlich auf append Teil –

Verwandte Themen