cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008
-
22 nov. 2005 à 10:10
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
23 nov. 2005 à 18:19
Bonjour,
Voici un problème que je rencontre avec FindFirst.
J'ai écrit un code qui recherche si un fichier quelconque, ayant une extension particulière dans un répertoire donné, existe.
en gros voici la ligne de code
if FindFirst(Repertoire+'Outil\*.OUT',faAnyFile,Dirinfo)=0 then
begin
texte:=dirinfo.name;
etc....
end else message erreur ....
je pensais que cette fonction ne trouverais que les fichiers ayant une extension .OUT puisque dans le Path de findfirst j'ai mis *.OUT. Hors lorsque j'ai testé la fonction, j'avais dans le répertoire un seul fichier ABC.OUT. Findfirst me trouve bien le fichier. J'ai voulu ensuite testé l'affichage de mon message d'erreur, j'ai alors renommé le fichier ABC.OUT en ABC.OUT2
et là chose bizarre qui a sans doute une explication mais que je ne connais pas Findfirst ne m'affiche pas le message d'erreur mais fait comme ci il avait trouvé un fichier ayant l'extension .OUT alors qu'il n'y en a pas puisque le fichier s'appelle alors ABC.OUT2. En passant par le debugger la variable texte prend bien le nom du fichier ABC.OUT2 alors que cela ne devrait pas être possible. (findfirst avec une recherche *.OUT me fait en fait une recherche *.OUT*)
J'ai fait ensuite les mêmes tests mais en changeant l'extension des fichiers et de la recherche.
dans le répertoire j'ai mis un fichier et un seul ABC.OU et j'ai mis dans finsfirst *.OU
findfirst trouve le fichier => normal.
j'ai renommé le fichier en ABC.OU1 et là findfirst ne trouve plus de fichier *.OU et m'affiche le message d'erreur. Donc ici cela fonctionne comme je le souhaitais. Je me suis alors dit qu'au delà de 3 caractères après le point findfirst ne tient plus compte de rien. J'ai refais un test avec un fichier qui s'appelle ABC.OUTS et une recherche findfirst avec *.OUTS. Là findsfirst trouve le fichier => normal. J'ai renommé le fichier en ABC.OUTS1 et là mon message d'erreur s'affiche, findfirst ne trouve pas de fichier. Cela fonctionne comme cela devrait.
2 questions:
Pourquoi findfirst ne fonctionne pas correctement lorsque je fais une recherche avec 3 caractères après le point?
Peut être que findfirst a une origine dos, dans ce cas y a t-il une fonction identique à findfirst mais qui gère les noms dit long?
Autre point, le problème ne vient pas du nombre de caractères après l'extension : la preuve tu as fait un test et cela marche. Alors d'ou vient l'erreur ?? déjà il faudrait le code dans son ensemble pour dire. Ensuite as tu fermé ton application avec ton test pour ABC.OUT2
? Sinon fais un test avec ABC.OUT puis ferme l'appli. Créer ABC.OUT2 puis FERME LE et relance ton appli et regarde ce que tu obtients.
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008 23 nov. 2005 à 09:37
Salut,
Pour être sur que je n'ai pas un bug caché dans mon programme, j'en ai fait un autre avec seulement les instructions suivante. Je n'ai qu'une fiche avec un bouton
voici le programme:
procedure TForm1.Button1Click(Sender: TObject);
var Dirinfo:TSearchRec;
texte:String;
begin
if FindFirst('D:\Mes Documents\*.OUT',faAnyFile,Dirinfo)=0 then
begin
Texte:=Dirinfo.Name;
MessageDlg('je vois le fichier Outil: '+Texte,mtInformation,[mbOK],0)
end else MessageDlg('je ne vois pas le fichier Outil',mtError,[mbOK],0);
end;
j'ai refais tous les tests précedents, en fermant et en relançant l'application j'ai toujours ce phénomène. Que mon fichier s'appelle ABC.OUT ou ABC.OUT2 ou même ABC.OUT2222222222, j'ai toujours le message "je vois le fichier outil ABC.OUT ou OUT2 ou OUT2222222222"
Findfirst me fait une recherche de type *.OUT* au lieu de *.OUT
(j'utilise delphi6 perso mais même la version 2005 perso c'est pareil)
Findfirst est une syntaxe pascal et non delphi. Qu'elle est la syntaxe équivalente en delphi?
Delphi est l'hériier du Pascal : donc tu peux utiliser findfirst. Maintenant est ce qu'il y a une traduction spéciale pour delphi, je ne crois pas.
Ce que je te conseille, c'est de regarder sur Google les paramêtres de Findfirst. Sache aussi qu'il exite des fonctions nextfind ect ect. En cherchant je pense que tu trouveras le pk du comment ? (désolé je n'ai pas Delphi sous les yeux d'ou ma réponse).
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008 23 nov. 2005 à 13:06
oui je l'avais trouvé cette page là. mais elle concerne le langage pascal pas delphi. Et je ne vois pas où est mon problème car ma structure findfirst est
correct.
j'ai ecrit le programme en turbo pascal. j'ai le même problème mais là c'est normal car turbo pascal ne gère pas les noms longs c'est pour cela que ta page propose une unité pour gérer les noms longs (et je n'ai plus envi de programmer en Turbo pascal)
Je peux toujours testé le nom du fichier que findfirst me renvoi et ça resoudra mon problème. Mais c'est le pourquoi qui m'interresse.