2016-04-27 6 views
0

Ich schrieb diesen Code, es ctreates Ordner namens "Fitness50" jedes Mal, aber die Textdatei ist nicht erstellt.Ich möchte Textdatei erstellen diesen Ordner und speichern Sie dann Werte einer Arraylist. so für i diesesIch muss Ordner in bin-debug erstellen und dann in Textdatei erstellen und schreiben

DirectoryInfo myDir = new DirectoryInfo(@"E:"); 
ParentFolderName1 = "Fittness50"; 
myDir.CreateSubdirectory(ParentFolderName1); 
myDir = new DirectoryInfo(ParentFolderName1); 
ParentFolderName1 = "Fittness50"; 
myDir.CreateSubdirectory(ParentFolderName1); 



FileName1 = "./" + "" + ParentFolderName1 + "" + "/" + "Fittness10" + "" + "" + PopulationID + "" + ".txt"; 

FileStream fs2 = new FileStream(FileName1, FileMode.Create, FileAccess.Write); 
StreamWriter SW2 = new StreamWriter(fs2); 

for (i = 0; i < AlTargetData.Count; i++) 
{ 
     SW2.WriteLine(AlTargetData[i]); 

} 

AlTargetData.Clear(); 

SW2.Close(); 
fs2.Close(); 
+0

"Textdatei ist nicht erstellt", erhalten Sie Fehler, die verhindern, dass die Datei erstellt wird? – Zack

+0

Überprüfen Sie 'AlTargetData.Count', um sicherzustellen, dass es nicht 0 ist. Wenn Sie diese Schleife nie aufrufen, um' SW2.WriteLine (AlTargetData [I]); 'aufzurufen, dann würde ich keine Datei erstellen, aber ich ' Ich bin nicht 100% sicher, dass die Datei nicht erstellt wird, wenn Sie den 'StreamWriter' instanziieren. – Zack

+1

sieht es so aus, als ob Sie einen Ordner auf 'E:' erstellen, nicht in 'bin/debug'. Verwenden Sie 'Path.Combine' anstatt Zeichenketten für den Speicherort der Datei zu kombinieren. – DrewJordan

Antwort

4

Nun, zunächst einmal versucht haben, ist / nicht die bevorzugte Verzeichnisseparator auf Windows, aber \ ist. Nur weil / passiert zu arbeiten, gibt es keinen Grund, es zu verwenden. Zweitens erstellen Sie den Ordner Fittness10 überhaupt nicht, aber Sie erstellen Fittness50 zweimal. Und drittens schreiben Sie die Datei nicht in die von Ihnen erstellten Ordner, sondern in das aktuelle Arbeitsverzeichnis ..

Ihr Code (oder zumindest das, was ich verstehe, Sie erreichen wollen) verkürzt dies deutlich werden:

string path = @"E:\Fittness50\Fittness10"; 
if (!Directory.Exists(path)) 
    Directory.CreateDirectory(path); 

string fileName = Path.Combine(path, String.Format("{0}.txt", PopulationID)); 
File.WriteAllText(fileName, String.Join(Environment.NewLine, AlTargetData)); 

Bitte beachten Sie, dass Sie sollten nicht zu bin\debug betrachten zu schreiben. Es wird keine bin\debug auf dem Computer des Endbenutzers sein. Wenn der Benutzer Ihre Anwendung installiert, wird sie höchstwahrscheinlich im Ordner Program Files installiert, in den Ihre Anwendung nicht schreiben darf. Erwägen Sie stattdessen, an einen gemeinsamen Speicherort zu schreiben, wie z. B. die, die Sie in Environment.GetFolderPath auswählen können.

+1

FYI you * kann */'in einer Pfadzeichenfolge verwenden, Windows wird es gut behandeln. – DrewJordan

+0

Zum Schreiben in den Programmordner: das kommt drauf an. Ich mache oft kleine Tools ohne irgendein Installationsprogramm, indem ich eine einfache ini-Konfigurationsdatei im Programmordner verwende. Ich erwarte keine Sekunde, dass irgendjemand es in den Programmdateien entpacken wird. Für größere Sachen, ja, benutze die Benutzerordner. – Nyerguds

+0

Sie könnten, aber warum sollten Sie? Windows definiert das Pfadtrennzeichen als "\". Die Tatsache, dass es auch "/" behandelt, bedeutet nicht, dass Sie es verwenden sollten. –

Verwandte Themen