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

C++Builder Discussion :

[BCB6]Tester l'existance d'un fichier [Débutant(e)]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut [BCB6]Tester l'existance d'un fichier
    Bonjour tout le monde,
    J'aurais besoin d'une information.
    Je cherche depuis un moment a tester si un fichier .ini existe dans le même répertoire que mon exécutable. Mais voila je ne sait plus comment faire a part faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(FileExists([Dans le répertoire de l'exécutable])
    {
        Edit9->Caption = "Effacement du fichier";
    }
    Il me semble que l'on puisse mettre C:\\repertoire\\fichier.ini mais voila mon exécutable est pas forcément dans C: donc cette methode ne peux pas s'appliqué.

    Auriez-vous par hasard une solution ?
    Cordialement.

  2. #2
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Vous déclarez un AnsiString nommé FicIni que vous renseignez au moment de la construction de la l'application comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FicIni=ChangeFileExt(Application->ExeName,".INI");
    Dans ces conditions, FicIni contient de nom du fichier avec son chemin en entier, vous n'avec plus qu'à faire le test où bon vous semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(FileExists(FicIni))
       {
       //ce qui se passe si le fichier .ini existe
       }
    À bientôt
    Gilles

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Par défaut
    essaye d'adapter le code qui suit il marche pour un fichier *.txt
    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
     
    AnsiString Filepath;
    AnsiString Filename = "Test.txt";
    TStringList *Fichier = new TStringList;
    //---
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Filepath = ExtractFilePath(Application->ExeName);
    }
    //---
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
    AnsiString N = Filepath + Filename;
    if(FileExists(N))
        {
        Fichier->LoadFromFile(N);
        }
    ....
    bon travail.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    Ce que je cherche c'est la racine...
    La ou se trouve l'exécutable!
    De cette façon je n'ai plus besoin de connaitre le lien.

  5. #5
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Bonjour

    Tu peut avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExtractFilePath(Application->ExeName)
    ou quelque chose comme cela

    A++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    On peut vraiment utiliser cette méthode ?
    Je continue a me documenté la dessus, on ne sait jamais si un jour je trouve la solution...

  7. #7
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Draner Voir le message
    On peut vraiment utiliser cette méthode ?
    Je continue a me documenté la dessus, on ne sait jamais si un jour je trouve la solution...
    Avez-vous essayé ma solution ? Elle fonctionne, je me demande bien ce que vous voulez de plus. Vous obtenez le chemin et le nom du fichier dans une variable, cette variable étant globale faisant partie de la classe principale, elle est toujours disponible, vous pouvez donc la donner à FileExists quand vous voulez, ça résout complètement la question.

    À bientôt
    Gilles

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    Effectivement vue comme cela!
    Il faut que je test cela...
    Je vous dirais ce qu'il en est alors

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    Bonsoir.
    Désolé, tout d'abord, pour le double post mais quelques lignes plus loins...
    J'ai tester le code de Gilles Louïse mais il m'est arrivé un phénomène étrange!

    Mon fichier se nome préférences.ini et il est bien au niveau de l'executable cependant, le chemin qu'il m'indique est correcte mais pas le nom de fichier... et c'est la que ça se corse!
    Si je tape le code ainsi:
    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
     
    //Récupère la racine et le fichier.ini
    AnsiString FichierIni;
     
    FichierIni = ChangeFileExt(Application->ExeName, "preferences.ini");
     
    //Test si un fchier ini existe
    if(FileExists(FichierIni))
    {
               Edit1->Text = "Présent";
    }
    else
    {
               Edit1->Text = "Non présent!";
    }
    on a toujours "Non présent!".
    Alors je me suis dit regardons de plus près le chemin pour voir si je n'avais pas fais d'erreur de codage...
    j'ai donc modifier ainsi pour les tests:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Récupère la racine et le fichier.ini
    AnsiString FichierIni;
     
    FichierIni = ChangeFileExt(Application->ExeName, "preferences.ini");
     
    Edit1->Text = FichierIni;
    et la je me retrouve avec: "D:\Prog perso\TestIni1\Project1preferences.ini"
    Mais "Project1preferences.ini" n'est pas mon fichier ini donc je ne peux pas le tester! Oops
    Je suis sur que la solution n'est pas loin mais la j'avoue que je suis un peu noob pour trouver ce qui cloche...
    Auriez-vous, par hasard un correctif qui permettrait de retrouvé le fichier?
    Merci beaucoup, encore, pour les indications.
    Cordialement.

  10. #10
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Bonsoir

    Essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Récupère la racine et le fichier.ini
    AnsiString FichierIni;
     
    FichierIni = ChangeFileExt(Application->ExeName, "\\preferences.ini");
     
    //Test si un fchier ini existe
    if(FileExists(FichierIni))
    {
               Edit1->Text = "Présent";
    }
    else
    {
               Edit1->Text = "Non présent!";
    }
    A++

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Et pourquoi passer par ChangeFileExt ???
    L'extraction du path de l'exécutable est bien réalisée avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString Filepath =  ExtractFilePath(Application->ExeName);
    Notons que ExtractFilePath ne supprime pas le dernier anti slash...
    Donc comme ici on manipule des AnsiString, on peut faire assez court :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AnsiString Filename = Filepath + "Blabla.ini";
    if( FileExists( Filename ) )
        {
        //...
        }
    A plus !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Par défaut
    En fait ça ne serais qu'une question de mise en forme...
    Une concaténation éroné et qui me provoquerais un résultat inattendu

    Petite question annexe: Quel différence y a t il entre ChangeFileExt() et ExtractFilePath() ?

    Cordialement.

    Edité car celà fonctionne.J'ai donc suivie ce que vous m'avez expliqué j'ai arrangé le code comme suit:
    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
     
    //Récupère la racine et le fichier.ini
    AnsiString FichierIni, NomFichierIni;
     
    NomFichierIni = "preferences.ini";
    FichierIni = ExtractFilePath(Application->ExeName) + NomFichierIni;
     
    //Test si un fchier ini existe
    if(FileExists(FichierIni))
    {
            Edit1->Text = "Présent";
    }
    else
    {
            Edit1->Text = "Non présent!";
    }
    Ceci me dis bien si le fichier existant ou pas. En plus cette méthode à l'avantage d'être directif (Il ne regarde que le fichier qu'on lui impose). Pratique en cas de panne pour renommer préférences.ini en preferences_old.ini, c'est exactement ce que je cherchais!
    Merci encore une fois pour vos précisions
    Cordialement.

  13. #13
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par henderson Voir le message
    Et pourquoi passer par ChangeFileExt ???
    Tout simplement parce que le nom du fichier ini est en principe le même que le nom de l'application, ainsi qu'il est souvent d'usage, il en résulte qu'il suffit de reprendre le path et le nom de l'application avec .ini en extension, d'où ce que je proposais. On obtient alors une variable complète correspondant au nom du fichier ini.

    Si toutefois effectivement vous souhaitez avoir un fichier ini dont le nom ne soit pas spécifiquement celui de l'application, vous pouvez oeuvrer autrement.

    Moi, j'utilise cette méthode depuis toujours et elle marche.

    À bientôt
    Gilles

  14. #14
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Draner Voir le message
    Bonsoir.
    Désolé, tout d'abord, pour le double post mais quelques lignes plus loins...
    J'ai tester le code de Gilles Louïse mais il m'est arrivé un phénomène étrange!

    Mon fichier se nome préférences.ini et il est bien au niveau de l'executable
    Vous n'avez pas suivi exactement ma syntaxe, donc ça ne marche pas. Il s'agit à partir du nom de l'application avec le chemin d'en déduire le nom du fichier ini selon l'exacte syntaxe que j'ai donnée, c'est tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FicIni=ChangeFileExt(Application->ExeName,".INI");
    Cette instruction vous donne dans FicIni le path et le nom du fichier ini en prenant pour hypothèse, ainsi qu'il est souvent d'usage, que le nom du fichier ini soit le même que le nom de l'application. Pour vous en convaicre, faites du pas à pas et consultez cette variable juste après qu'elle a été renseignée, vous constaterez qu'elle contient path+nom de l'application+extension ini, ainsi le test avec FileExists sera tout à fait opérationnel.

    J'ai toujours procédé ainsi dans toutes mes applications depuis les origines jusqu'à nos jours.

    À bientôt
    Gilles

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

Discussions similaires

  1. [FTP] Tester l'existence d'un fichier.
    Par antony dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2006, 18h54
  2. [File]Tester l'existence d'un fichier
    Par florantine dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 23/11/2005, 10h45
  3. tester l existence d un fichier sous turbo pascal
    Par Newllite dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/01/2004, 12h47
  4. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10

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