2010-03-10 5 views
1

Comment puis-je obtenir la séquence de fichiers qui est la même que le système de fichiers Windows? Parce qu'il y a tellement d'éléments de tri de système de fichiers: nom, taille, date de dernière modification, tag (win 7), rating (win 7), donc si j'utilise CFileFind API pour simuler le comportement de tri comme système de fichiers Windows est assez difficile. Alors, comment puis-je obtenir les fichiers dont la séquence est la même que le système de fichiers Windows ??Question sur le problème de tri du système Windows

Répondre

0

Je ne suis pas sûr de ce que fait CFindFile, mais FindFirstFile et amis renvoie les fichiers dans l'ordre où ils existent dans le répertoire NTFS.

Je ne sais pas pourquoi ce serait le plus souhaitable, cependant, ce n'est pas exactement « intuitive » par la définition de personne ...

+0

La méthode CFindFile est similaire à FindFirstFile, les deux sont triés par ordre alphabétique. Quelqu'un me suggère d'utiliser l'API IShellFolder, quelqu'un connaît-il la méthode IShellFolder? – user290305

+0

Oh, je n'ai pas compris votre question ... Je pensais que vous vouliez trier les fichiers dans l'ordre du système de fichiers, pas dans l'ordre que l'explorateur utilise. Explorer utilise * approximativement * le même ordre que StrCmpLogicalW, donc vous pouvez probablement l'utiliser pour trier les noms de fichiers. –

+0

Emm, je veux récupérer la séquence de fichiers la même que l'explorateur, pas l'ordre du système de fichiers. Mais la séquence de fichiers dans l'explorateur est conçue par l'utilisateur en taille de fichier, date de dernière modification, etc., et il y a beaucoup de critères de tri dans l'explorateur, donc je ne peux pas simuler le tri du fichier d'exploration. Il ne suffit donc pas de trier le fichier comme StrCmpLogicalW. – user290305

0

Raymond Chen a fait un article assez détaillé sur "Why do NTFS and Explorer disagree on filename sorting?"

Cependant, notez que FindFirstFile() et ses proches ne trient pas réellement les résultats - ils vous renvoient simplement les fichiers dans l'ordre dans lequel le système de fichiers les remet. NTFS a une commande à ses propres fins (et je ne suis pas sûr que cette commande est spécifiée - que cela vous semble ordonné est probablement juste une coïncidence heureuse). Les systèmes de fichiers FAT et les systèmes de fichiers réseau auront leur propre commande (ou pas d'ordre - les fichiers peuvent être dans le répertoire dans l'ordre dans lequel ils ont été créés - je pense que les systèmes FAT sont comme ça).

Si vous avez besoin d'une commande particulière pour les fichiers retournés par FindFirstFile() et vos amis, vous devrez effectuer ce tri vous-même.

Depuis le FindFirstFile() docs: "FindFirstFile ne fait pas le tri des résultats de la recherche Pour plus d'informations, voir FindNextFile."

Et à partir du docs for FindNextFile(): "L'ordre dans lequel la recherche renvoie les fichiers, tels que l'ordre alphabétique, n'est pas garanti et dépend du système de fichiers.Si les données doivent être triées, l'application doit effectuer la commande après avoir obtenu tous les résultats. "

CFileFind()CFileFind() ne fait aucune promesse sur l'ordre des noms de fichiers retournés - je serais étonné s'il faisait un tri non plus (puisqu'il devrait obtenir tous les fichiers possibles du répertoire de destination avant de retourner le premier pour pouvoir le retirer).

+0

Emm, je veux récupérer la séquence de fichiers la même que l'explorateur, mais la séquence de fichiers dans l'explorateur est conçu par l'utilisateur en taille de fichier, date de dernière modification, etc, et il existe plusieurs critères de tri dans l'explorateur. simuler le tri du fichier d'exploration. Donc, y a-t-il une méthode pour explorer la séquence de fichiers? – user290305

Questions connexes