2017-06-20 1 views
0

J'ai un problème avec l'ordre de lecture de tous les fichiers du dossier.vb.net Ordre de lecture de tous les fichiers du dossier

Mon code lire les fichiers avec mauvais ordre quand j'ai des fichiers: 1.txt 2.txt 10.txt 20.txt 100.txt

mon code lire les fichiers regarder la première lettre de fichier: 1.txt 10.txt 100.txt 2.txt 20.txt

comment puis-je lire le fichier avec l'ordre numérique? 1.txt 2.txt 10.txt 20.txt 100.txt

-je utiliser le code ci-dessous sur le:

 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

Ces nombres arent sont testés, donc "9.txt" sera "supérieur" à "1000.txt". Vous devez trier les résultats en utilisant un tri naturel [tel que celui ici] (http://stackoverflow.com/a/33786276/1070452) Aussi s'il vous plaît lire [demander] et prendre le [tour] – Plutonix

+0

Voici une question presque identique https://stackoverflow.com/q/12907499/5162073 –

+0

est donc-il une méthode sans trier les noms de fichiers? – JakubM

Répondre

0

Si vous avez les noms de fichiers sous forme de chaîne, vous pouvez trier les fichiers de la manière suivante

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 

Qu'est-ce qu'il va faire, est de vous assurer que tous les fichiers ont une longueur totale de 10 caractères, en ajoutant 0 devant le texte, à la fin, vous obtiendrez somethin g comme

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

De cette façon, il sera réglé alfabetically correctement, une autre option est de convertir en int, mais je ne vois pas la nécessité ici

Un exemple complet se trouve dans ce dotnetfiddle

0

en supposant que le nom du fichier, sans l'extension, se compose de seulement une valeur numérique, alors vous pourriez faire:

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