2010-01-19 113 views
7

我有一個父目錄中的目錄列表。這些目錄將以00001,00002,00003 ...的格式創建,因此具有較大尾隨號碼的目錄是最近的一個。在上面的例子中,它是00003.我想以編程方式獲得這個。C#:對目錄名進行排序並選擇最新的目錄名最簡單的方法是什麼?

感謝您的幫助..

+0

建議您發佈的最高尚似乎不夠好主意你寫的代碼... – 2010-01-19 11:04:26

+0

迭代通過他們和跟蹤,除非有,讓他們自動排序的方式,但我懷疑」會更快。哦,你正在尋找最簡單的.. – falstro 2010-01-19 11:05:13

回答

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

試試這個:

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

顯然與父目錄的路徑替換C:\

+0

謝謝RichardOD。這是我的錯誤。刪除了我上面的評論.. – satya 2010-01-20 04:27:39

+0

@ rainbow365-不用擔心。我只是不確定這個問題會發生什麼! – RichardOD 2010-01-20 09:39:29

+0

應該說x => x.Name,否則你會得到關於DirectoryInfo沒有實現IComparable的崩潰 – Fadeway 2017-02-03 07:54:08

3

爲什麼不能做這樣的事情:

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

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

什麼:

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

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

是不是做了兩次工作 - 按升序排序然後再次步行集合以獲得最大值? – JBRWilkinson 2010-01-19 11:15:38

+0

@JBRWilkinson,你是對的,修好了 – 2010-01-19 11:16:54

1

只需將GetDirectories或GetFiles的輸出引入冒泡排序函數即可。

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++; 
      } 
     } 
    } 
相關問題