Entwickler-Ecke
Basistechnologien - Anscheinend Problem mit StreamWriter
mandawar - Mo 30.03.09 10:55
Titel: Anscheinend Problem mit StreamWriter
Hi Leute,
ich habe ein Koncolenprogramm geschrieben, das aus alles Unterordnern eines Root-Ordners alle Ordner und Dateien in eine csv ausgeben soll. Allerdings bricht der Algorithmus in einem Ordner immer ab. Er schreibt die datei, allerdings ohne Endung und ignoriert den Rest einfach.
Ich habe mir das mal im Debugger angeschaut, und komischerweise geht er innerhalb des Programmes alle weiteren Dateien durch, schreibt sie allerdings nicht mehr in die csv. Die Csv hat am Ende um die 700 Zeilen.
Ich weis echt micht woran es liegt...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace Umstellungsverwaltung_1 { class Program { private static FileStream ExcelFileStream; private static StreamWriter ExcelStreamWriter;
static void Main(string[] args) { Program Umstellungsverwaltung = new Program(); StringBuilder strRootVerzeichnis = new StringBuilder(@"R:\pa\y52d\src\y"); if (File.Exists(@"P:\Umstellungsverwaltung.csv")) { try { ExcelFileStream = File.OpenWrite(@"P:\Umstellungsverwaltung.csv"); } catch { Console.WriteLine("ES IST EIN FEHLER AUFGETRETEN!"); Console.ReadLine(); return; } } else { ExcelFileStream = File.Create(@"P:\Umstellungsverwaltung.csv"); } ExcelStreamWriter = new StreamWriter(ExcelFileStream); ExcelStreamWriter.WriteLine(@"Ordner;Programmname;Status"); SchreibeInExcel(strRootVerzeichnis.ToString()); }
static void SchreibeInExcel(String Ordner) { Int32 i = new Int32(); i = 0; ExcelStreamWriter.WriteLine(Ordner.Substring(14,Ordner.Length-14) + ";;"); string[] strInhalt = Directory.GetFileSystemEntries(Ordner); foreach (string s in strInhalt) { if (0 != (File.GetAttributes(strInhalt[i]) & FileAttributes.Directory)) { SchreibeInExcel(strInhalt[i].ToString()); } else { FileInfo aktFile = new FileInfo(strInhalt[i]); ExcelStreamWriter.WriteLine(";" + aktFile.Name + ";"); } i++; } } } } |
Weis jmd. von euch woran es liegt, oder braucht ihr noch weitere Infos?
Gruß
Basti
JüTho - Mo 30.03.09 11:34
Hallo,
es wäre vielleicht hilfreich, wenn du den betreffenden Dateinamen angeben würdest (vorausgesetzt natürlich, das Problem tritt immer an derselben Stelle auf): Ist es ein besonderer Name, sind die Lese- und Schreibrechte in diesem Verzeichnis eingeschränkt oder ...?
Mir fallen folgende Punkte auf:
C#-Quelltext
1: 2: 3:
| if (0 != (File.GetAttributes(strInhalt[i]) & FileAttributes.Directory)) if ((File.GetAttributes(strInhalt[i]) & FileAttributes.Directory) == FileAttributes.Directory) |
FileInfo ist überflüssig; das erzeugt nur kurzfristig ein Objekt. Direkter geht es so:
C#-Quelltext
1:
| ExcelStreamWriter.WriteLine(";" + Path.GetFileName(strInhalt[i]) + ";"); |
ToString ist nur dann nötig, wenn das Objekt kein String ist. Hier es überflüssig:
C#-Quelltext
1: 2: 3:
| SchreibeInExcel(strInhalt[i].ToString()); SchreibeInExcel(strInhalt[i]); |
Vielleicht ist auch der ExcelStreamWriter schuld; wie der arbeitet, ist nicht ersichtlich. Eine csv-Datei ist doch eine einfache Textdatei; da würde ich sowieso mit
File.AppendAllText arbeiten. Sauberer ist eigentlich sogar noch, alle Teile im Arbeitsspeicher zusammenzutragen (per StringBuilder oder List<string>) und am Schluss insgesamt abzuspeichern.
Übrigens gibt es die Code-Markierung speziell für C#.
Jürgen
mandawar - Di 31.03.09 16:01
Okay, danke, hat geklappt :)
Ich habe jetzt alles in einem StringBuilder gesammelt und dann einfach in eine csv geschrieben, lief super :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!