IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Impossible de lister les fichiers dont le nom comporte un ou des accents [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut Impossible de lister les fichiers dont le nom comporte un ou des accents
    Bonsoir,

    je ne m'en sors pas avec les accents ou plutôt, Lazarus ne s'en sort pas : j'ai passé deux jours dessus, j'ai retourné tout le web, j'ai appliqué toutes les solutions données par tous ceux qui disent que pour eux ça a fonctionné mais chez moi c'est rien de chez rien.
    Je gagne juste le message "Le fichier spécifié est introuvable" et le prog plante, quand j'essaye de lister le contenu d'un dossier contenant par exemple "Soir d'été.pdf".
    Ce n'est pas un problème d'espace ou d'apostrophe car il me suffit de remplacer ces "é" maudits par de bêtes "e" pour que tout fonctionne, mais vous vous en doutez, ça ne m'arrange pas.

    Vous faites comment, vous, pour lister correctement des objets avec des noms barbares ?

    Là, une fois n'est pas coutume, je suis sous Windows (un vieux XP sp2 32 bits) avec un Lazarus 1.8.2.

    Grand merci par avance,
    :coucou
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,
    Si je me souviens bien, avec la 1.8.2 il doit avoir besoin des fonctions UTF8toSys et SystoUTF8 pour passer de la représentation LAZARUS (UTF8) à la représentation FPC(Ansi Windows).
    Ce n'est plus utile depuis la V2 (Pour autant que je m'en souvienne).
    Cordialement
    EDIT Ajout du numéro de version qui avait sauté à cause du clavier (et probablement de l'interface entre la chaise et le clavier...)

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,
    Citation Envoyé par acaumes Voir le message
    ... fonctions UTF8toSys et SystoUTF8 pour passer de la représentation LAZARUS (UTF8) à la représentation FPC(Ansi Windows).
    Bizarre car j'avais trouvé ces fonctions, mais je n'ai pas dû utiliser la bonne, genre SysToUTF8 quand il me fallait UTF8ToSys. Ah, entre la chaise et le clavier se cachent de curieuses choses...

    Pour éviter à ceux qui passeront ici de chercher, je rappelle qu'il faut ajouter LazUTF8 dans les uses.

    Mais la chose ennuyeuse qui me reste sur les bras, c'est que si avec cette fonction ça fonctionne très bien quand elle est appelée bêtement depuis un bouton qui vise directement le fichier avec accents, ça ne fonctionne plus dans l'usine à gaz qui parcourt récursivement une arborescence temporaire à grands coups de FindFirst/FindNext/FindClose.
    J'ai remplacé ces trois-là par des LazFileUtils.FindXxxxUTF8 sans aucune amélioration.

    Une autre idée ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Salut!
    Si je me souviens bien avec la 1.8.2 Lazarus est en UTF8 et FPC est en natif système d'exploitation.
    Il faut donc que à chaque fois que tu passes de LAZARUS à FPC utiliser UTF8toSys et à chaque fois que tu passes de FPC à LAZARUS utiliser SysToUTF8.

    Attention Tous les FileStream sont FPC... (Pour autant que je me souvienne)

    FindFirst et consorts sont pour moi natifs et donc vont bien sur les fonctions FPC (Attention au répertoire que tu dois ajouter si ce n'est pas le répertoire courant) (à vérifier au débogueur éventuellemnt)
    FindFirstUTF8 est une addition LAZARUS et il faut faire la conversion...

    NB. Pourquoi ne pas passer à la version 2 qui est UTF8 de partout ? Je dois avouer que cela m'a bien arrangé parce que jongler entre les fonctions LAZARUS et celles de FPC n'est vraiment pas une sinécure...

    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par acaumes Voir le message
    NB. Pourquoi ne pas passer à la version 2 qui est UTF8 de partout ? Je dois avouer que cela m'a bien arrangé parce que jongler entre les fonctions LAZARUS et celles de FPC n'est vraiment pas une sinécure...
    Tu m'as convaincu, voilà qui est fait !

    Ensuite j'ai ouvert mon projet maudit, ai viré tout ce qui concernait les passages utftosys et inversement, j'ai fait le plus propre possible, j'ai relancé l'exe et... patatras ! Le fichier avec accents n'est toujours pas trouvé !

    Face à ça je ne vois pas quoi faire.

    (et cet aprème faut que je bouge, malgré la pluie)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Face à ça je ne vois pas quoi faire.
    Si tu pouvais poster un peu de code on verrait peut être mieux...

    Cordialement

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function LastWriteTime(const FileName: string): TFileTime;
    var
      AttributeData: TWin32FileAttributeData;
    begin
      if not GetFileAttributesEx(PAnsiChar(FileName), GetFileExInfoStandard, @AttributeData) then
        RaiseLastOSError;
      Result := AttributeData.ftLastWriteTime;
    end;
    Bon voilà, j'ai enfin trouvé où ça coince précisément, dans cette fonction sur l'instruction GetFileAttributesEx(PAnsiChar(FileName), alors qu'en pas-à-pas la souris sur FileName montre bien 'chemin\Soir d'été.pdf'.
    Vues, les simples quotes pas de mon fait et bien visibles en pas-à-pas ? Et malgré ça, System error OS code 2, le fichier spécifié est introuvable.

    Voilà pourquoi des petits programmes de test sans vérifier la date du fichier se passaient bien : rien à voir avec FindFirst/Next/Close.

    Et j'ai un peu googlé GetFileAttributesEx, sans grand succès

    C'est la tuile…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello Jipété,
    Citation Envoyé par Jipété Voir le message
    Et j'ai un peu googlé GetFileAttributesEx, sans grand succès
    C'est la tuile…
    Pourquoi tu t'embêtes à utiliser une fonction qui ne tourne que sous windows alors que dans SysUtils tu as l'équivalent en multi-plateforme.
    Pour avoir la dernière date de modification d'un fichier il y a la fonction FileAge. Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FileName: String;
      fa: Longint;
      S : TDateTime;
    begin
      if OpenDialog1.Execute then
       begin
         Filename := OpenDialog1.Filename;
         fa := FileAge(Filename);
         If fa<>-1 then
           begin
             S:=FileDateTodateTime(fa);
             Memo1.Append('Age du fichier ' + Filename + ' : ' +DateTimeToStr(S));
           end;
       end;
     
     
    end;
    Et cela fonctionne pour les fichiers avec accents :

    Age du fichier D:\zic\Ange\Tome 87\06 - Sur la trace des fées.mp3 : 19/05/2010 17:09:20
    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    ami JP tu me simplifies la vie !

    Le seul problème je crois, c'est que je perds la conversion en LocalTime, mais ça n'est probablement pas trop important.

    L'idée (vieille d'au moins 15 ans), c'était de nettoyer les fichiers temporaires de Windows (à l'époque) en conservant ceux qui ont moins de 24 h d'ancienneté.
    Pourquoi ? Parce que Windows étant sujet à plantages et autres blocages faisant perdre le travail en cours, je m'étais dit qu'il serait intéressant de pouvoir examiner les fichiers temporaires au redémarrage, des fois que ça puisse sauver des heures de boulot.
    Mais conserver tous les fichiers temporaires sous Windows ce n'est pas raisonnable, d'où l'idée de l'outil, qui nettoie c:\windows\temp et c:\utilisateurs\son_nom\local settings\temp.

    Et pour ce faire, j'utilisais entre autres la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function UTCFileTimeToDateTime(const FileTime: TFileTime): TDateTime;
    begin
      Result := SystemTimeToDateTime(UTCFileTimeToSystemTime(FileTime));
    end;
    {http://stackoverflow.com/questions/10564741/elapsed-time-interval-in-delphi
    You call LastWriteTime to get the last modified time in file time format.
    Then call UTCFileTimeToDateTime to convert into TDateTime accounting
    for the prevailing local time zone of the machine.
    You can then compare that value with Now.}
    mais je n'arrive pas à convertir la sortie de FileAge en TDateTime -- j'ai essayé de ruser en remplaçant TDateTime par un Double mais ça ne passe pas non plus, le compilo ne se laisse pas berner.

    Bah, c'est pas bien grave, merci à tous.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Est-ce que FileDateToDateTime existe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileDateToDateTime(FileAge(..))
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Lung Voir le message
    Est-ce que FileDateToDateTime existe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileDateToDateTime(FileAge(..))
    Oui, c'est d'ailleurs ça que j'utilise, après le post de JP.

    Avant j'utilisais UTCFileTimeToDateTime(blabla...), mais cette fonction veut un TFileTime que je ne sais pas obtenir.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    regarde du côté des fonctions UniversalTimeToLocal et LocalTimeToUniversal dans dateUtils.
    Exemple : avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
             S:=FileDateTodateTime(fa);
             S1:= LocalTimeToUniversal(S);
             S2:= UniversalTimeToLocal(S);
             Memo1.Append('Age du fichier ' + Filename + ' : ' +DateTimeToStr(S));
             Memo1.Append('Age du fichier ' + Filename + ' : ' +DateTimeToStr(S1));
              Memo1.Append('Age du fichier ' + Filename + ' : '+DateTimeToStr(S2));
    j'obtiens :
    Age du fichier D:\zic\Ange\Tome 87\06 - Sur la trace des fées.mp3 : 19/05/2010 17:09:20
    Age du fichier D:\zic\Ange\Tome 87\06 - Sur la trace des fées.mp3 : 19/05/2010 16:09:20
    Age du fichier D:\zic\Ange\Tome 87\06 - Sur la trace des fées.mp3 : 19/05/2010 18:09:20
    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Hi, JP !

    Mais que deviendrai-je sans toi ?

    Je ne connaissais pas ces fonctions, qui vont me faciliter la vie, si jamais il y a des blagues cet été.

    Pour le moment, la première (celle que tu as donnée ce matin) me convient très bien dans le sens où elle me remonte le même horodatage que celui du fichier créé il y a une poignée de minutes, impeccable.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2015, 14h26
  2. Réponses: 3
    Dernier message: 26/07/2011, 19h27
  3. renommer un fichier dont le nom comporte un "à"
    Par laurentSc dans le forum OVH
    Réponses: 1
    Dernier message: 05/08/2010, 10h11
  4. Réponses: 3
    Dernier message: 29/06/2010, 10h24
  5. Réponses: 1
    Dernier message: 12/09/2008, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo