2010-01-19 4 views
7

Mam listę katalogów w katalogu nadrzędnym. Te katalogi będą tworzone w formacie takim jak 00001, 00002, 00003 ... tak, że ten z większym końcowym numerem jest ostatni. w powyższym przykładzie jest to 00003. Chcę uzyskać to programowo.C#: jaki jest najprostszy sposób sortowania nazw katalogów i wybrania najnowszego?

dzięki za wszelką pomoc ..

+0

proponuję pisać kod napisałeś ... –

+0

iterację je i śledzenie najwyższa jeszcze wydaje się na tyle dobrym pomysłem, chyba że istnieje sposób, aby je automatycznie sortowane, chociaż wątpię, że” Będę szybciej. Och, szukałeś najprostszego .. – falstro

Odpowiedz

3

NET 2:

private void button1_Click(object sender, EventArgs e) { 
     DirectoryInfo di = new DirectoryInfo(@"C:\Windows"); 
     DirectoryInfo[] dirs = di.GetDirectories("*", 
      SearchOption.TopDirectoryOnly); 

     Array.Sort<DirectoryInfo>(dirs, 
      new Comparison<DirectoryInfo>(CompareDirs); 
    } 

    int CompareDirs(DirectoryInfo a, DirectoryInfo b) { 
     return a.CreationTime.CompareTo(b.CreationTime); 
    } 
8

Spróbuj tego:

var first = Directory.GetDirectories(@"C:\") 
    .OrderByDescending(x => x).FirstOrDefault(); 

Oczywiście zastąpić C:\ ze ścieżką katalogu nadrzędnego.

+0

dziękuje RichardOD. To mój błąd. Usunięto mój powyższy komentarz .. – satya

+0

@ rainbow365- nie martw się. Po prostu nie byłem pewien, o co chodziło! – RichardOD

+0

Powinny powiedzieć x => x.Nazwa, w przeciwnym razie dostaniesz awarię o DirectoryInfo niewdrożenia IComparable – Fadeway

3

Dlaczego nie zrobić czegoś takiego:

string[] directories = Directory.GetDirectories(@"C:\temp"); 
string lastDirectory = string.Empty; 

if (directories.Length > 0) 
{ 
    Array.Sort(directories); 
    lastDirectory = directories[directories.Length - 1]; 
} 
1

Co o:

var greaterDirectory = 
    Directory.GetDirectories(@"C:\") 
     .Select(path => Path.GetFileName(path)) // keeps only directory name 
     .Max(); 

lub

var simplest = Directory.GetDirectories(@"C:\").Max(); 
+0

Czy to nie robi dwa razy pracy - porządkowanie w porządku rosnącym, a następnie chodzenie kolekcji ponownie, aby uzyskać wartość maksymalną? – JBRWilkinson

+0

@JBRWilkinson, miałeś rację, naprawiono –

1

Wystarczy rzucić dane wyjściowe GetDirectories lub GetFiles przy funkcji sortowania bąbelkowego.

private void SortFiles(FileSystemInfo[] oFiles) 
    { 
     FileSystemInfo oFileInfo = null; 

     int i = 0; 
     while (i + 1 < oFiles.Length) 
     { 
      if (string.Compare(oFiles[i].Name, oFiles[i + 1].Name) > 0) 
      { 
       oFileInfo = oFiles[i]; 
       oFiles[i] = oFiles[i + 1]; 
       oFiles[i + 1] = oFileInfo; 
       if (i > 0) 
       { 
        i--; 
       } 
      } 
      else 
      { 
       i++; 
      } 
     } 
    } 
Powiązane problemy