Laden...

String-Arrys zusammenfügen?

Erstellt von Neokil vor 15 Jahren Letzter Beitrag vor 15 Jahren 8.132 Views
Neokil Themenstarter:in
206 Beiträge seit 2008
vor 15 Jahren
String-Arrys zusammenfügen?

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

309 Beiträge seit 2007
vor 15 Jahren

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

N
335 Beiträge seit 2006
vor 15 Jahren

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

2.760 Beiträge seit 2006
vor 15 Jahren

Hmm... string.Join(string, string[]) hat zwar eine umgedrehte Signatur aber würde es vermutlich auch tun ohne den VB geraffel.

373 Beiträge seit 2006
vor 15 Jahren

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

1.346 Beiträge seit 2008
vor 15 Jahren

vieleicht auch Array.Copy.

Gruß pdelvo

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo tonka,

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