C# mehrere Dateien des selben Formates einlesen und ausgeben

OrtnerPeter

Newbie
Registriert
Nov. 2012
Beiträge
2
Hallo Leute, ich bräuchte mal bitte Eure hilfe.
Ich bin totaler Programierneuling und versuche seit geraumer Zeit ein kleines Prog für mich zu schreiben.
Ich möchte den Inhalt von mehreren genau gesagt 175 csv Files einlesen und diese dann als einziges CSV File zusammenfassen und wieder ausgeben.
Mein Problem ist das jedes diese CSV Files einen anderen Namen hat.

In jedem der 175 Files steht nur eine Zahl.
Mein Gedanke war den Inhalt von diesen Files in eine richTextBox einzulesen, und dann als CSV wieder auszugeben.
Für ein File gelingt mir das auch siehe Beispiel Code aber nicht für mehrere??
Ich könnte auch 175 mal mein Beispiel schreiben nur jedes mal einen
anderen Pfad aber das müsste doch einfacher gehen oder.
Und das ausgeben als CSV File funktioniert auch einwandfrei das bekomme ich auch
schon hin nur das einlesen mehrer Files will ich nicht kapieren.

Ich hoffe es kann mir jemand helfen.

mein Beispiel Code


Code:
private void frm_FileInhaltList_Load(object sender, EventArgs e)
        {

            //einlesen aller Files *.csv
            FileStream fs;
            StreamReader sr;
            string dateiname = @"C:\Lager\Data\DataMaterial\Spezial.csv";
            string zeile;

            if (!File.Exists(dateiname))
            {
                MessageBox.Show("Datei " + dateiname + " existiert nicht !");
                return;
            }

            fs = new FileStream(dateiname, FileMode.Open);
            sr = new StreamReader(fs);
            while (sr.Peek() != -1)
            {
                zeile = sr.ReadLine();
                richTextBox1.Text += zeile + "\n";
            }
            sr.Close();

        }
 
Ich finde es seltsam, dass Du zwar ein funktionierendes Stück Code hinbekommst, aber noch nie von Schleifen gehört hast. Wie hast Du dir das Wissen denn angeeignet?

Der beste Weg, sich eine neue Programmiersprache zu erschließen, ist meiner Meinung nach:
1. beliebiges Tutorial machen
2. weiteres beliebiges Tutorial machen
3. Learning by Doing

Mir scheint, als hättest Du Punkt 1 & 2 ausgelassen und hättest einfach direkt angefangen, habe ich recht? ;)
 
nun Du hast recht wie schon gesagt bin totaler neuling was c# angeht :(
habe mir ein paar Bücher zugelegt und den code dann zusammengestoppelt,
nur in den büchern habe ich nichts gefunden um mehrere files einzulesen
gibt es in c# nicht die möglichkeit ein füllzeichen wie z.B. den * als unbekanntes einzufügen ??
z.B.
Code:
//einlesen aller Files *.csv            
FileStream fs;            
StreamReader sr;            
string dateiname = @"C:\Lager\Data\DataMaterial\*.csv";            
string zeile;

auf jeden fall schon mal danke das Du mir geantwortet hast :)
 
Den Platzhalter gibt es aber nicht in diesem Zusammenhang. Schau' dir man die Klasse Directory und deren Methode GetFiles an.

Btw. hat eine RichTextBox als GUI-Element hier nichts verloren, es sei denn willst den Inhalt auch anzeigen. Ein StringBuilder wäre hier besser geeignet.
 
Ich habe leider keine Ahnung von C#, aber ich denke, wenn Du in diversen Hilfeseiten mal nach den Stichworten "Loop", "For", "While" suchst, wirst Du das Grundkonzept verstehen. Dazu vielleicht noch die Links der anderen Kommentatoren oben.

In Ruby sähe ein einfacher Loop zum Anzeigen der Dateien im Verzeichnis /home/kraligor/testdir so aus:
Code:
directory = Dir.entries("/home/kraligor/testdir")
for i in directory do
  puts i
end
directory: Array, in dem alle Dateien im angegebenen Verzeichnis gespeichert werden.
for i in directory do ... end: Für jedes Element (i) im Array directory wird die angegebene Aktion ausgeführt.
puts i: Das jeweilige Element (i) wird ausgegeben.

Hilft dir konkret wenig, aber vielleicht verstehst Du das Konzept dahinter. ;)
 
Zuletzt bearbeitet:
Hier ein kleiner Tipp ...

Code:
public class ListFiles
{
    public List<string> GetFileList(string Root, bool SubFolders)
    {
        List<string> FileArray = new List<string>();
        try {
            string[] Files = System.IO.Directory.GetFiles(Root);
            string[] Folders = System.IO.Directory.GetDirectories(Root);

            for (int i = 0; i < Files.Length; i++)
            {
                FileArray.Add(Files[i].ToString());
            }

            if (SubFolders == true) 
            {
                for (int i = 0; i < Folders.Length; i++) 
                {
                    FileArray.AddRange(GetFileList(Folders[i], SubFolders));
                }
            }
        }
        catch (Exception Ex) 
        {
            throw (Ex);
        }
        return FileArray;
    }
}

Die Methode rufst du z.B. mit

Code:
ListFiles listFiles = new ListFiles();

// false, wenn Unterordner ausgelassen werden sollen
List<string> dieDateien = listFiles.GetFileList(@"C:\DeinOrdner\",false);

foreach string datei in dieDateien {
string tuWas = datei;
}

auf. Bin unterwegs und habe den Code kurz aufgeschrieben, konnte ihn leider nicht testen. Vom Ansatz her sollte es passen. Mit der foreach-Schleife kannst du die Liste durchlaufen.
 
Zurück
Oben