Findfirst, findnext liste des fichiers, mais pas les répertoires...?
le code suivant répertorie les fichiers mais pas les répertoires
var
rec : tsearchrec;
begin
findfirst('c:\test\*',faanyfile-fadirectory,rec);
showmessage(rec.Name);
if findnext(rec) <> 0 then close else
showmessage (rec.Name);
end;
- Et la problème est....
- juste que sa liste de fichiers répertoires
- et j'ai mis "/*" après c:/test mais stackoverflow n'est pas de l'enregistrer, je pense que quelque chose de mal avec leur serveur
- Utilisez "\\*" pour afficher "\*". (même dans les commentaires - oh man!)
- Omair, et alors? Qu'avez-vous vous attendez à faire quand vous soustrait
faDirectory
? Que voulez-vous faire à la place?
Vous devez vous connecter pour publier un commentaire.
FirstFirst
n'est pas très bon à l' hors résultats. La pratique courante est d'utiliserFindFirst
etFindNext
à énumérer tous des fichiers et des répertoires, puis vérifier les critères dont vous avez besoin dans votre propre code et ignorer ceux que vous ne voulez pas.FindFirst()
renvoie toujours les fichiers, même si vous ne souhaitez que des dossiers. Vous avez besoin de tester l'TSearchRec.Attr
terrain afin de déterminer si le signalement d'entrée est en fait un fichier ou un dossier (et si vous avez de mettre en œuvre une boucle récursive, assurez-vous d'ignorer le "." et ".." dossiers ou votre boucle répète indefinately).Lire la documentation sur la façon dont le filtre fonctionne réellement:
En d'autres termes,
FindFirst()
renvoie toujours les fichiers normaux, indépendamment de tout critère de filtre que vous spécifiez. LeAttr
paramètre simplement comprend autres types d'attributs dans la base de filtre. Vous avez besoin de tester l'TSearchRec.Attr
terrain afin de déterminer si le signalement d'entrée est en fait un fichier ou un répertoire, par exemple:Si vous mettez en œuvre une recherche récursive de la boucle, assurez-vous d'ignorer le "." et ".." répertoires ou votre boucle répète indefinately:
Vous sont explicitement exclues de répertoires en déclarant "- faDirectory" dans le paramètre flags.
Ce sujet findfirst('c:\test\*', faanyfile, rec); //pas faanyfile-fadirectory
Si vous voulez tous les fichiers et répertoires, il suffit de passer dans faDirectory à la méthode findfirst. Il va déjà de retour vous fichiers.