2017-06-20 154 views
0

我從文件夾中讀取所有文件的順序有問題。vb.net從文件夾中讀取所有文件的順序

我的代碼讀取文件與錯誤的順序 時,我有文件: 的1.txt 2.txt 10.txt 20.txt 100.txt

我的代碼讀取文件看的第一個字母文件: 的1.txt 10.txt 100.txt 2.txt 20.txt

我怎麼能讀取數值順序文件? 的1.txt 2.txt 10.txt 20.txt 100.txt

我使用的代碼的下面:

 Dim di As New DirectoryInfo(Path), fiArr As FileInfo() = di.GetFiles() 
     Dim strplik As FileInfo 
     For Each strplik In fiArr 
     'read strplik from file 
     next strplik 
+0

那些不是數字,他們正在測試,所以'9.txt'將會比'1000.txt'更高。您需要使用自然排序對結果進行排序[例如這裏的一個](http://stackoverflow.com/a/33786276/1070452)另請閱讀[問]並參加[遊覽] – Plutonix

+0

這裏有一個幾乎相同的問題https://stackoverflow.com/q/12907499/5162073 –

+0

所以有沒有排序文件名稱的任何方法? – JakubM

回答

0

如果你有文件名作爲字符串,你可以對文件進行排序以下列方式

Dim files as String() = {"1.txt", "10.txt", "15.txt", "2.txt", "20.txt"} 
Dim sortedResults = from file in files _ 
        order by file.PadLeft(10, "0") _ 
        select file 
For Each result in sortedResults 
    Console.WriteLine(result) 
next 

它的作用,是確保所有文件有10個字符的總長度,在文本的前面添加0,到最後,你會得到事端像

1.txt => 000001.txt 
10.txt => 000010.txt 

這樣克,將alfabetically正確排序,另一種方法是轉換爲int,但是,我沒有看到的必要性,在這裏

完整的例子都可以在此找到dotnetfiddle

0

假設文件名,不帶擴展名,只包含一個數值,那麼你可以這樣做:

Dim files = New DirectoryInfo(path).GetFiles.OrderBy(Function(x) Val(System.IO.Path.GetFileNameWithoutExtension(x.Name))) 
For Each file In files   
    Debug.Print(file.FullName) 
Next 
相關問題