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 :

Fichier Text Dans Executable


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut Fichier Text Dans Executable
    Bonjours,
    Dans mon proget je me sert de plusieur fichier que je charge a louverture de l'application pour chargé des donnée que le programme a besoin

    (donnée qu'il doit lire dans l'automate, message d'evenement, message d'alarmes etc ...)
    Mais le prob est que ces fichiers sont modifiable par n'importe qui ... jai bien pensé les metre en fichier caché mais ce n'est pas une bonne solution.

    Je voulais savoir si il etais possible de les inclure a l'executable lors de la compilation pour que l'utilisateur n'y ai plus acces ...

    Cordialement
    Baxter

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Tu peux l'ajouter en ressource dans ton exécutable.

    Je le fait pour le A Propos de mon application qui affiche toutes les modifications des différentes versions de mon application.

    tu crée un fichier .rc dans lequel tu met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fichier RCDATA "fichier.txt"
    Fichier correspond au nom te permettant d'accéder à ta ressource
    Ce fichier rc, tu l'ajoute à ton projet.

    Ensuite lorsque tu veux extraire le fichier tu fait ceci

    tu inclus ceci dans la form ou tu veux récupérer le fichier texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <fstream.h>
    et pour l'extraction du fichier, tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // On Extrait le fichier de la ressource
    TResourceStream *Res = new TResourceStream((int)HInstance,"Fichier",RT_RCDATA);
     
    // On sauvegarde la ressource dans un fichier temporaire ou RepAppli est le répertoire de l'application
    Res->SaveToFile(RepAppli + "tmp.tmp");
     
    // On détruit la ressource
    delete Res;
    Moi j'ai choisit "tmp.tmp" pour le nom du fichier mais tu peux faire ce que tu veux. Il ne faut pas oublier de détruire le fichier quand tu as terminé de l'utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // On le supprime
    DeleteFile(RepAppli + "tmp.tmp");

  3. #3
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Si tu mets les fichier dans les ressources on peut toujours aller les chercher avec un programme comme Ressource Hacker.

    Tu peux toujours compresser les ressources dans l'exécutable avec UPX, mais c'est facile à décompresser.

    Donc, peut-être que le mieux est d'encrypter ton texte.

    Sinon tu peux toujours utiliser les deux méthodes.

  4. #4
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    encryption .. moui
    Le probleme n'est pas que je vais que les donnée soi secrete .. mais etant donnée que c'est un fichier structuré, il sufie de changé un caractére pour que le prog n'arrive plus a l'utilisé entierement.
    Et je voudrais conserver un pouvoir de modif facile si je dois changé des donnée a la ressource

  5. #5
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    bon jai tester ta méthode kurul
    le fichier .rc

    Il me crée un fichier .res mais sa n'enleve pas le prob, on peut toujous l'ouvrir et le modifier :s .
    Mais sa me plait deja plus

  6. #6
    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 !

    Peut-être avec RenameFile en utilisant une extension .BMP ou .WAV ...

    Donc avant de le charger, le modifier en tant que .TXT
    Traiter comme tel pendant l'exécution du programme.
    Le modifier en tant que .BMP ou .WAV quand on quitte le programme (ou dès que l'on n'en a plus besoin).

    A moins d'une énorme coïncidence, le .BMP ou le .WAV ne pourra pas être ouvert d'une façon normale...

    C'est juste une idée !

    A plus !

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    salut Baxter67
    Je pense que dans la FAQ il y a ce que tu cherche
    Le lien

  8. #8
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Je te conseil de suivre le lien de mon ami blondelle c'est un bon lien.
    Attention après la compilation, c'est normale que tu puisses voir le fichier. Il n'est pas déplacé dans la ressource de l'exe mais copié. Par contre, si tu le supprime (ou si tu déplace l'exe) la ressource sera identique et donc ton fichier sera dans l'exe disponible où et quand tu le désires.

    Tu pourras inclure, modifier ou supprimer toi même ta ressource (donc ton fichier) assez facilement.

  9. #9
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Peut-être avec RenameFile en utilisant une extension .BMP ou .WAV ...

    Donc avant de le charger, le modifier en tant que .TXT
    Traiter comme tel pendant l'exécution du programme.
    Le modifier en tant que .BMP ou .WAV quand on quitte le programme (ou dès que l'on n'en a plus besoin).

    A moins d'une énorme coïncidence, le .BMP ou le .WAV ne pourra pas être ouvert d'une façon normale...

    C'est juste une idée !

    A plus !
    mes fichier porte pas d'extention .txt

    c'est .mess .ala .MwR et .MwW

    jai utilisé des extension de mon invention (ce qui permet de savoir ce qu'il y a dedans) et pour eviter que quelqu'un les ouvre facilement. Quand on ve louvrir windows demande avec quelle programme on veut l'ouvir, mais si il choisie bloc note on arrive a l'ouvrie, le lire et meme le modifier

  10. #10
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Pour mon exemple, ton fichier est en Txt dans la ressource car c'est à partir de ce fichier qu'il crée la ressource. Tu peux ainsi le modifier et en recompilant ton programme, la ressource sera modifié en conséquence.

    Par contre pour pouvoir l'utiliser lors de l'exécution, le programme est obligé de l'extraire de la ressource pour ensuite pouvoir lire son contenu. "dans mon exemple, extraction en un fichier tmp.tmp".

    Ainsi le fichier n'est visible que lors de l'exécution. si tu le détruit dès que tu n'en a plus besoin, le fichier n'est plus visible et reste bien entendu dans la ressource de ton programme.

    Après c'est sur que si tu va dans le répertoire de l'application ou se trouve le fichier tmp.tmp et que tu fais ouvrir avec le bloc-note, tu verras le contenu du fichier, ca avec cette méthode, tu ne peux pas faire autrement

  11. #11
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    oui oui merci je vien de voir sa, qu'il ne falais pas que les fichier .rc et .res soit present
    J'ai fais comme sa :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
            ResTmp = new TResourceStream((int)HInstance,"FichierMess",RT_RCDATA);
            ResTmp->SaveToFile("Mess.tmp");
            ListTmp->LoadFromFile("Mess.tmp");
            DeleteFile("Mess.tmp");
            delete ResTmp;
     
               //stockage des info pour utilisation dans prog (dans des tableau)
     
     
            ResTmp = new TResourceStream((int)HInstance,"FichierAla",RT_RCDATA);
            ResTmp->SaveToFile("Ala.tmp");
            ListTmp->LoadFromFile("Ala.tmp");
            DeleteFile("Ala.tmp");
            delete ResTmp;
     
                   //stockage des info pour utilisation dans prog (dans des tableau)
     
     
            ResTmp = new TResourceStream((int)HInstance,"FichierMWRead",RT_RCDATA);
            ResTmp->SaveToFile("MWR.tmp");
            ListTmp->LoadFromFile("MWR.tmp");
            DeleteFile("MWR.tmp");
            delete ResTmp;
     
                    //stockage des info pour utilisation dans prog (dans des tableau)
     
     
            ResTmp = new TResourceStream((int)HInstance,"FichierMWWrite",RT_RCDATA);
            ResTmp->SaveToFile("MWW.tmp");
            ListTmp->LoadFromFile("MWW.tmp");
            DeleteFile("MWW.tmp");
            delete ResTmp;
     
                    //stockage des info pour utilisation dans prog (dans des tableau)
    mon fihcier .rc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FichierMWRead RCDATA "FichierRessource/ListMWRead.MwR"
    FichierMWWrite RCDATA "FichierRessource/ListMWWrite.WMw"
    FichierMess RCDATA "FichierRessource/message.mess"
    FichierAla RCDATA "FichierRessource/messageAlarme.ala"
    et sur le pc qui utilise le prog je met que l'executable et sa fonctionne bien

    Confirmer moi juste que je fais tous bien et je met le [resolue]

  12. #12
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    C'est bien çaa pas de souci

    Tu détruis bien tes fichiers ainsi, personne ne peut les lire, c'est exactement ca.

    fait juste attention aux chemins de tes fichiers car des fois, tu peux avoir des surprise.

    Moi je metterais plutôt le chemin complet pour ne pas être embêté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // On récupère le répertoire de l'application
    AnsiString RepAppli = ExtractFilePath(Application->ExeName);
     
    ResTmp = new TResourceStream((int)HInstance,"FichierMess",RT_RCDATA);
            ResTmp->SaveToFile(RepAppli + "Mess.tmp");
            ListTmp->LoadFromFile(RepAppli + "Mess.tmp");
            DeleteFile(RepAppli + "Mess.tmp");
            delete ResTmp;

  13. #13
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    ok , merci je vais le faire comme sa avec le chemin complet

    merci encore de votre aide, ce post est donc résolue

    Merci encore

    Cordialement Baxter

  14. #14
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, voici un moyen de mettre ton texte directement dans une AnsiString sans passer par un fichier temporaire. Voici le code tiré du site Web d'Experts Exchange:

    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
            AnsiString Details;
            bool NextLine;
            HRSRC ResHandle;
            HGLOBAL MemHandle;
            void *ResPtr;
            int ResSize;
            char *lpName;
     
            ResHandle = FindResource((int)HInstance, "FichierMess", "RC_DATA");
            if(ResHandle == NULL){return false;}
            MemHandle = LoadResource(HInstance, ResHandle);
            if(MemHandle == NULL){return false;}
            ResPtr = LockResource(MemHandle);
            if(ResPtr == NULL){return false;}
            ResSize = SizeofResource(HInstance, ResHandle);
            char *pszBuffer = new char[ResSize+1];
            memcpy(pszBuffer, ResPtr, ResSize);
            Details = pszBuffer;
            delete []pszBuffer;
    PS: J'ai pas encore essayer le code

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/05/2005, 08h51
  2. [JAR]ouverture de fichier texte depuis executables jar
    Par julien31 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/03/2005, 15h53
  3. [FB 1.5] ouvrir fichier texte dans une ps
    Par jlf dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2005, 20h29
  4. Insertion d'un fichier texte dans une moulinette PL/SQL
    Par Douanier007 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 24/01/2005, 16h08
  5. [CR] fichier texte dans un etat
    Par fab dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 12/09/2003, 10h59

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