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 :

Warning: Implicit string type conversion from "AnsiString" to "WideString" [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut Warning: Implicit string type conversion from "AnsiString" to "WideString"
    bonjours à tous
    j'ai une fonction qui liste les répertoires et sous répertoires et qui fonctionne très bien mais j'ai ces messages:

    Compilation du projet - Cible : lib\x86_64-win64\Project2.exe : Succès - Avertissements : 4
    Unit1.pas(59,46) Warning: Implicit string type conversion from "AnsiString" to "WideString"
    Unit1.pas(59,73) Warning: Implicit string type conversion with potential data loss from "WideString" to "AnsiString"
    Unit1.pas(65,32) Warning: Implicit string type conversion from "AnsiString" to "WideString"
    Unit1.pas(65,59) Warning: Implicit string type conversion with potential data loss from "WideString" to "AnsiString"
    voici mon code:
    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
    20
    21
    22
    Function tform1.ListeFichiers(Chemin:String):boolean;
    Var S:TSearchRec;
    Begin
      Chemin:=IncludeTrailingPathDelimiter(Chemin);
      Result:=false;
      If FindFirst(Chemin+'*.*',faAnyFile,S)=0
      Then Begin
        Repeat
             if (S.Name<>'.')And(s.Name<>'..')//je saute le début
          Then Begin
            If (S.Attr And faDirectory)<>0 //si répertoire         
              Then ListeFichiers(Chemin+S.FindData.cFileName)   // je rappelle la fonction      
              Else
                begin
                listbox1.items.add(Chemin+S.FindData.cFileName);
                end;
          End;
        Until FindNext(S)<>0;
        FindClose(S);
      End;
    result:=true;
    End;
    la fonction est appelée avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Button1.Enabled:=False;
      Try
        ListeFichiers(Edit1.Text);
      Finally
        Button1.Enabled:=True;
      End;
    end;

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 641
    Par défaut Expliciter Implicite
    Bonjour,

    Les fonctions comme FindFirst et des structures comme TSearchRec manipulent des chaînes unicode (WideString) d'où les conversions implicites indiquées.

    Salutations

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Sous Linux, votre code ne se compile pas : FindData est inconnu.

    Donc j'ai fait les modifications suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              ListeFichiers(Chemin + {S.FindData.cFileName}S.Name)   // je rappelle la fonction
            else
            begin
              listbox1.items.add(Chemin + {S.FindData.cFileName}S.Name);
    Et je n'ai aucun avertissement à la compilation. Vous pourriez essayer peut-être, pour voir ce que ça donne sous Windows ?

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Hello pour t'aider avec la recherche de fichier, tu peux jeter un oeil sur un de mes codes https://github.com/jdelauney/BZScene...FileFinder.pas qui fonctionne sur Linux et Windows (et Mac normalement)
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre éclairé
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 334
    Par défaut
    Effectivement avec {S.FindData.cFileName} plus de message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              ListeFichiers(Chemin + {S.FindData.cFileName}S.Name)   // je rappelle la fonction
            else
            begin
              listbox1.items.add(Chemin + {S.FindData.cFileName}S.Name);

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/06/2017, 11h15
  2. Réponses: 6
    Dernier message: 14/09/2016, 08h07
  3. Réponses: 3
    Dernier message: 04/05/2010, 08h58
  4. Réponses: 2
    Dernier message: 08/12/2009, 12h57
  5. Réponses: 2
    Dernier message: 18/02/2009, 13h30

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