Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
String-Arrys zusammenfügen?
Neokil
myCSharp.de - Member

Avatar #avatar-2865.jpg


Dabei seit:
Beiträge: 211
Herkunft: Schmieheim (Kleines Kaff 50km nördlich von Freiburg)

Themenstarter:

String-Arrys zusammenfügen?

beantworten | zitieren | melden

Hallo!
Ich bins mal wieder mit einer neuen Frage und zwar bin ich grad dabei ein Synchronisier-Programm zu programmieren und bin auf ein Problem gestoßen und zar möchte ich alle Dateien (Auch die der Unterverzeichnisse) auflisten, also gehe ich mit einer Schleife alle verzeichnisse durch:


        private string[] DateienZählen(string Verzeichnis)
        {
            string[] Dateien = Directory.GetFiles(Verzeichnis);
            string[] UnterOrdner = Directory.GetDirectories(Verzeichnis);
            foreach (string dir in UnterOrdner)
            {
                Dateien += DateienZählen(dir);
            }
            return Dateien;
        }
Zum Verketten habe ich einfach den + Operator genommen, aber dann habe ich festgestellt, dass man damit keine String-Arrys verketten kann.
Kann mir jemand sagen wie ich die zwei String-Arrys verketten kann oder wie man das ganze einfacher schreiben kann?

MFG
Neokil
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Neokil am .
private Nachricht | Beiträge des Benutzers
Hajoseb
myCSharp.de - Member

Avatar #avatar-2670.jpg


Dabei seit:
Beiträge: 315

beantworten | zitieren | melden

Habe vor ein paar Tagen die Methode


Strings.Join(string[],String)
als Tipp bekommen.

Der 2.Parameter ist das Trennzeichen zwischen den Strings ...

mfg Hajoseb

P.S. Strings mit >> s << am Ende
"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.”
Anatole France
private Nachricht | Beiträge des Benutzers
NeuroCoder
myCSharp.de - Member



Dabei seit:
Beiträge: 337
Herkunft: NRW

beantworten | zitieren | melden

Hallo TheProg,

benutze eine List<string>. Da du sowieso ein dynamisches Wachstum benötigst, sind Arrays hier nicht das Mittel der Wahl.
Falls du am Ende ein Array benötigst, benutze List.ToArray().

Mfg NeuroCoder
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2885
Herkunft: München

beantworten | zitieren | melden

Hmm... string.Join(string, string[]) hat zwar eine umgedrehte Signatur aber würde es vermutlich auch tun ohne den VB geraffel.
private Nachricht | Beiträge des Benutzers
tonka
myCSharp.de - Member

Avatar #avatar-2860.gif


Dabei seit:
Beiträge: 373
Herkunft: Österrreich

beantworten | zitieren | melden

Hallo,

ich seh das auch wie NeuroCoder => List<String> ist hier die beste Wahl. Als kleinen Tipp noch dazu, überprüfe bei deinem Code, ob das zurückgegebene Array der Funktionen GetFiles/GetDirectories nicht null ist, sonst könnte es einmal krachen wenn du in die foreach gehst!


private List<String> DateienZählen(string Verzeichnis)
{
     //hier sollten noch Kontrollen staffinden, ob der "Verzeichnis"-String nicht leer ist und ob das Directory existiert!!!
     List<String> erg = new List<String>();
     String[] Dateien = Directory.GetFiles(Verzeichnis);
     if(Dateien != null && Dateien.Length > 0)
     {
           foreach(String Datei in Dateien)
           {
                erg.Add(Datei);
           }
     }
     String[] UnterOrdner = Directory.GetDirectories(Verzeichnis);
     if(UnterOrdner != null && UnterOrdner.Length > 0)
     {
           foreach (string dir in UnterOrdner)
           {
                 List<String> SubDateien = DateienZählen(dir);
                 if(SubDateien != null && SubDatein.Count > 0)
                 {
                          erg.AddRange(SubDateien);//bei der Zeile bin ich mir nicht sicher ob das so geht. hab keinen compiler "zur hand"! sonst musst du dateien einfach wieder per foreach der List adden!
                  }
           }
      }
     return erg;
}

MfG
Tonka
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

vieleicht auch Array.Copy.

Gruß pdelvo
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo tonka,
Zitat

erg.AddRange(SubDateien);//bei der Zeile bin ich mir nicht sicher ob das so geht. hab keinen compiler "zur hand"! sonst musst du dateien einfach wieder per foreach der List adden!
keine Sorge: List<string>.AddRange ist schon genau das Richtige und die eigentliche Lösung für das Ausgangsproblem.


Hallo Hajoseb,

Strings.Join geht hier an der Sache vorbei, weil ja zwei Collections zu einer Collection zusammengefügt werden sollen und die alle Elemente einer Collection zu einem String zusammengefügt werden sollen.


Hallo jaensen,

wenn man ein String-Array also Ausgangscollection hat und zu einem String zusammenfügen will, ist String.Join sicher besser als Strings.Join. Aber weder String.Join noch Strings.Join sind die Antwort auf das Ausgangsproblem.

herbivore
private Nachricht | Beiträge des Benutzers