2017-06-20 157 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 
相关问题