Laden...

Wie beim Programmstart mehrere Textdateien einlesen?

Erstellt von Lens445 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.605 Views
L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren
Wie beim Programmstart mehrere Textdateien einlesen?

Hey,

bin neu hier und die Frage klingt vllt doof, aber ich hab mehrere .txt Dateien gespeichert und will diese beim Öffnen meines Programms abrufen.
Ich finde nur Befehle und Tutorials für das Einlesen für einen Pfad? Das ist ja nicht schwer, da geb ich einfach den bestimmten Pfad ein, aber wie mach ich das mit mehreren? Die können sich auch immer verändern, heißt einfach "alle" Pfads eingeben geht auch nicht.

Hier mal mein Code:

   if (userInput == "1")
            {
                Console.WriteLine("Das sind alle vorhandenen Dateien:");
                Console.Read();              

                DirectoryInfo di = new DirectoryInfo(@"C:\Pfad wo alle Dateien drin sind");
                foreach (var file in di.GetFiles())
                {
                    Console.WriteLine(file.Name);
                    Console.Read();
                }
                Console.WriteLine();

mein Programm beendet sich einfach immer nachdem es jede Datei abgelaufen ist.
Ich muss ihm jetzt irgendwie noch sagen, dass er alle .txt Dateien anzeigen soll, gibt es da einen bestimmten Befehl den ich übersehen habe?

Bin eben neu im Programmieren 😁

LG

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

schau dir mal die Directory.GetFiles Method mit den Überladungen an.

Gruss

Coffeebean

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey,

danke, meinst du GetFiles(String,String) ? 🤔

aber ich versteh trotzdem nicht ganz, was mein zweiter string sein soll 8o

LG

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

nun - beenden tut es sich weil es alles getan hat, was du programmiert hast.

Ich vermute mal du möchtest eher an den Inhalt der Dateien rankommen?

Falls dem so ist gibt es viele Wege, u.A:
a) https://msdn.microsoft.com/de-de/library/s2tte0y1(v=vs.110).aspx
b) https://msdn.microsoft.com/en-us/library/ms143368(v=vs.110).aspx
c) https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/file-system/how-to-read-a-text-file-one-line-at-a-time
etc. pp.

Eine dieser Optionen musst du dann nur noch mit dem Finden der Dateien verbinden.

LG

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey,

Ja genau den Inhalt der dateien brauch ich auch. Aber das Problem ist, in dem Ordner befinden sich eben viele Dateien, z.B. eine mit .exe, oder .pdb. Aber ich will NUR die .txt Datei in meinem Programm lesen, wisst ihr was ich meine? Momentan sieht meine Konsole so aus:

Wähle eine Option aus:

  1. Datei öffnen
  2. Datei erstellen
    1
    Das sind alle vorhandenen Dateien:

ConsoleApp3.exe
ConsoleApp3.exe.config

ConsoleApp3.pdb
Hallo.txt

und ich will nur z.B. die Hallo.txt Datei haben.

16.828 Beiträge seit 2008
vor 6 Jahren

Warum liest Du nicht die Links, die man Dir gibt?
So ist die Hilfe nutzlos.

Coffeebean hat Dir einen Link für GetFiles gegeben, in der drin steht, wie man nach Dateiendung filtert.
Wenn Du nicht lesen willst, dann bringt das ganze hier nichts.

1
124 Beiträge seit 2012
vor 6 Jahren

Das gibt es eigentlich meiner Meinung nach 3 Lösungen.

Die schnelle Anfänger Lösung mit String.Endswith(".txt");
Die elegante Lösung ist mit Regex
Das direkte Filter der Dateitypen bei GetFiles ist natürlich die performanteste Lösung.

Gruß

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey Abt,

Hab ich sehr wohl gelesen und geschrieben, dass ich das nicht ganz verstehe, da ich nicht verstehe was mein zweiter string sein soll, siehe paar Beiträge weiter oben

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

bitte schau dir doch die Überladungen an. Ich habs schon geschrieben. Die Methode nimmt mehrere Paramter. U.a. (string,string).

Der Link führt auf einen weiteren

Directory.GetFiles Method (String,String)

Da ist sogar ein Codebeispiel.

string[] dirs = Directory.GetFiles(@"c:\", "c*");

Setz deinen Pfad ein. Setz deinen Suchfilter ein "*.txt". Und
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Dann packst dus schon 😃

Gruss

Coffeebean

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey 123thomas,

Vielen Dank, hilft mir schon mal sehr viel weiter 🙂

@Coffebean

Danke dir auch, werde es jetzt mal testen. 👍

16.828 Beiträge seit 2008
vor 6 Jahren

Hab ich sehr wohl gelesen und geschrieben

Es waren 4 Minuten zwischen Coffeebeans Hinweis und Deiner Antwort drauf....
Da hast Du mit Sicherheit nicht viel gelesen.

Also nimm Dir in Zukunft etwas Zeit um die Links zu lesen und das darin gezeigte auszuprobieren und zu verstehen - und vielleicht mal in Google nach Beispielen dazu suchen.
So viel kann man hier von absolut jedem erwarten. Auch von Dir 😉

4.938 Beiträge seit 2008
vor 6 Jahren

Hallo Lens445,

und wie das Einlesen der Textdateien geht, kannst du in [Tutorial] Dateioperationen: Alles über Dateien 2.2 nachlesen (nur die Abschnitte mit ".NET 2.0" sind dafür noch interessant).

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey,

habe jetzt folgenden Code:

            if (userInput == "1")
            {
                string[] allFiles = Directory.GetFiles(@"C:\Users\ConsoleApp3\bin\Debug", "*.txt");
                Console.WriteLine("Wähle eine Datei aus:", allFiles.Length);
                Console.Write("\n");
                foreach (string file in allFiles)
                {
                    Console.WriteLine(file);            
                }
                Console.Read();
                string indexFile = Console.ReadLine();

Ich glaube ich stehe gerade auf dem Schlauch, aber ich möchte dass meine Dateien nummeriert in der Konsole erscheinen, sodass man eben eine Datei auswählen kann, also die Dateien werden untereinander angezeigt, aber ohne Nummern davor 🤔 wie kann ich das ändern?

LG

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

naja...du iterierst ja schon. Was spricht dagegen einen Zähler hochzuzählen in der Schleife?

Alternativ kannst du eine For-Schleife (statt foreach) nehmen, da hast du den index (nullbasiert)

Gruss

Coffeebean

1
124 Beiträge seit 2012
vor 6 Jahren

Du kannst am besten die Pfade der Dateien in eine List<string> schreiben. Dann die List in die Console schreiben und dann kannst du anhand der Eingabe(die ein index sein muss) den Pfad aus der Liste holen um dann die Datei auszulesen.

Gruß

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

echt, brauch ich dafür ne Liste? 🤔
Dann muss ich ja erst mal immer alles in die Liste speichern und dann abrufen oder?

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

hier führen viele Wege nach Rom. Viele schaffen lieber mit Listen statt Arrays. Das, was du bisher vorhattest lässt sich aber mit beidem erreichen. Du brauchst nicht unbedingt eine Liste, kannst sie aber benutzen, wenn du magst.

Schau dir mal die Grundlagen von Schleifen etc an. ich glaube, dann wird vieles klarer. Auch deine Pfadangabe wird knallen, wenn du mal nicht im Debug-Mode kompilierst.

[FAQ] Wie finde ich den Einstieg in C#?

Gruss

Coffeebean

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Hey,

danke für eure Hilfe!

was sagt ihr zu diesem Code?

            if (userInput == "1")
            {
                string[] allFiles = Directory.GetFiles(@"C:\Users\Debug", "*.txt");
                Console.WriteLine("Wähle eine Datei aus:", allFiles.Length);
                Console.Write("\n");

                int count = 0;
                foreach (string file in allFiles)
                {
                    count += 1;
                    Console.WriteLine("{0} Datei: {1}", count, file);            
                }
                Console.Read();
                
                string inputFile = Console.ReadLine();

            }

Also es wird mir so als 1 Datei ist blablabla 2 Datei ist blabliblub usw angezeigt.

Kann ich damit dann weiter arbeiten, also dass wenn ich jetzt die 1 auswähle er mir dann den Inhalt von 1 ausgibt 🤔

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

klar kannst du. Musst es halt implementieren.

Können kann immer mit "Ja" beantwortet werden.

Den index hats du ja schon. Jetzt noch das File an geeigneter Stelle raussuchen und darstellen.

Aber lass uns das nicht programmieren. Versuch es, nimm den Debugger und dann hast du auch Erfolge 😃

Gruss

Coffeebean

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

Klar ich probier es selber, wollte nur wissen ob der Ansatz so stimmt 😃

danke 😃

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Lens445,

wir kennen ja auch den Kontext nicht. Natürlich gibt es Verbesserungen, aber bekomm doch erstmal das hin, was du hinbekommen willst und lerne mit der Zeit.

Warum du ein Read und ein ReadLine() machst ist mir nicht ganz klar. Aber wenn das ein Review sein soll müssen wir es in Reviews verschieben.

Gruss

Coffeebean