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 :

lire un fichier copié dans un dossier avec le meme code


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut lire un fichier copié dans un dossier avec le meme code
    j'ai écrit un code qui copie un fichier *.txt dans le dossier du code et qui doit lire ce fichier. La copie se fait normalement mais je n'arrive pas a lire le fichier après..c'est un problème de mémoire je suppose, mais je n'arrive pas à le résoudre.

  2. #2
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Bonsoir

    Essai avec TStringList et LoadfromFile

    A++

  3. #3
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Ou alors avec ShellExecute

    A++

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    non le problème c'est que j'arrive a enregistré le fichier. Et je peu le lire séparément avec un buffer mais pas avec le même code.

  5. #5
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    J'ai du mal a suivre avec le même code ?

    Tu veut creer le fihcier et le lire de suite apres la creation du dit fichier .txt,
    C'est quoi Ton code qui crée le fichier .TXT

    A++

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    En fait, je copie le fichier TXT vers le dossier qui contient mon code..Après je veut lire ce fichier avec le même code qui fait la copie..
    Le problème c 'est que le code ne prend pas en considération le fichier que j'ai copié..

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par vieri31 Voir le message
    En fait, je copie le fichier TXT vers le dossier qui contient mon code..Après je veut lire ce fichier avec le même code qui fait la copie..
    Le problème c 'est que le code ne prend pas en considération le fichier que j'ai copié..
    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
     
    void __fastcall TForm1::Quitter1Click(TObject *Sender)
    {
    AnsiString defaultPath = "C:\\Documents and Settings\\Ahmed\\Bureau\\code\\" ;
    AnsiString filename;
     
    if (OpenDialog1->Execute())
    {
       filename = defaultPath + ExtractFileName( OpenDialog1->FileName ) ;
        if (!CopyFile(OpenDialog1->FileName.c_str(), filename.c_str(), false))
        {
          ShowMessage("Impossible de copier");
        }
    }
    }
    je copie le fichier avec se code et je le lit avec celui la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::ifstream fichier("\\Documents and Settings\\Ahmed\\Bureau\\code\\azerty2.dfm");
        if(fichier)
        {
            std::string ligne;
     
            while (std::getline(fichier,ligne))
            {
                strncpy(buffer,ligne.c_str(),ligne.size()+1);
    }

  8. #8
    Membre confirmé Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    668
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Novembre 2004
    Messages : 668
    Points : 628
    Points
    628
    Par défaut
    Si ton code est bon et qu'il n'est pas executé en entier il faut alors faire avec ProcessMessage()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //code creation fichier .txt
    Application->ProcessMessage()
    //code lire le fichier .txt
    A++


    ATTEND je vient de voir ton code juste maintenant,

  9. #9
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Je crois que c'est petite saloperie liée au fait qu'on écrit sur le bureau. En changeant de répertoire de destination, votre code fonctionne parfaitement.

    Je ne sais pas pourquoi. Avis aux amateurs d'énigmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    AnsiString defaultPath = "D:\\ProjetsBCB\\P9\\" ;
    AnsiString filename;
     
    if (OpenDialog1->Execute())
    {
       filename = defaultPath + ExtractFileName(OpenDialog1->FileName) ;
       if (!CopyFile(OpenDialog1->FileName.c_str(), filename.c_str(), false))
          {
          ShowMessage("Impossible de copier");
          }
    }
    À bientôt
    Gilles

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Gilles Louïse Voir le message
    Je crois que c'est petite saloperie liée au fait qu'on écrit sur le bureau. En changeant de répertoire de destination, votre code fonctionne parfaitement.

    Je ne sais pas pourquoi. Avis aux amateurs d'énigmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    AnsiString defaultPath = "D:\\ProjetsBCB\\P9\\" ;
    AnsiString filename;
     
    if (OpenDialog1->Execute())
    {
       filename = defaultPath + ExtractFileName(OpenDialog1->FileName) ;
       if (!CopyFile(OpenDialog1->FileName.c_str(), filename.c_str(), false))
          {
          ShowMessage("Impossible de copier");
          }
    }
    À bientôt
    Gilles
    Bonjour
    En fait je n'ai pas un problème de copie..
    le problème c'est que lorsque je copie le fichier dans le dossier du code la copie se fait parfaitement mais pour la deuxième partie du code il est impossible de lire le nouveau fichier..
    Alors si je ferme l'application, le fichier etant deplacé, et je recommence le code arrive a lire ce fichier.

  11. #11
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    tu fais pas une lecture du fichier avant que qu'elle soie complètement copier ?

    je fais un petit code et teste cela.

    essaye en mettant 2 bouton

    1°) copier 2°) lecture

    aussi parfois lorsque le chemin est trop long , il est pas de lire le chemin
    en mode raccourci ~......

    @+

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Bily.sdi Voir le message
    tu fais pas une lecture du fichier avant que qu'elle soie complètement copier ?

    je fais un petit code et teste cela.

    essaye en mettant 2 bouton

    1°) copier 2°) lecture

    aussi parfois lorsque le chemin est trop long , il est pas de lire le chemin
    en mode raccourci ~......

    @+
    Exactement c'est ce que je fais. Un bouton pour la copie et un bouton pour la lecture.

  13. #13
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    et ??? rien ok je faire le code alors

  14. #14
    Membre chevronné
    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
    Points : 1 911
    Points
    1 911
    Par défaut
    Il manque le nom du disque dans votre code, cela provient peut-être de là.

    Sinon, on n’utilise plus aujourd’hui ces anciennes syntaxes, on utilise le composant très pratique TStringList, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    AnsiString Fic;
    TStringList *pSL;
     
    Fic= "nom_de_votre_fichier (ou nom à récupérer par l’open dialog)";
    pSL=new TStringList;
    pSL->LoadFromFile(Fic);
     
    // Traitement du fichier
     
    delete pSL;
    À bientôt
    Gilles

  15. #15
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Il faudrait, je pense, intercepter la dernière erreur du système ( LastError() ).
    Voici du code, au cas où BCB ne saurait pas le faire (c'est peut-être dans la FAQ ou les trucs et astuces depuis très longtemps):

    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
     
    //--A déclarer dans la classe de la form, chez moi TForm1
    void __fastcall TForm1::ShowLastError()
    {
    char* lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
    );
    // Display the string.
    MessageBox( NULL, lpMsgBuf, "LastError", MB_OK|MB_ICONINFORMATION );
    // Free the buffer.
    LocalFree( lpMsgBuf );
    }
    Donc ne pas se contenter d'exploiter true dans cette chasse au bug mais faire écho de l'erreur si on a false !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(...)
        {
        }
    else
        {
        // on supprime lorsque le bug est trouvé ... 
        // ou si on commence à se douter qu'il est ailleurs
        ShowLastError(); 
        }
    A plus !

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Il faudrait, je pense, intercepter la dernière erreur du système ( LastError() ).
    Voici du code, au cas où BCB ne saurait pas le faire (c'est peut-être dans la FAQ ou les trucs et astuces depuis très longtemps):

    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
     
    //--A déclarer dans la classe de la form, chez moi TForm1
    void __fastcall TForm1::ShowLastError()
    {
    char* lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
    );
    // Display the string.
    MessageBox( NULL, lpMsgBuf, "LastError", MB_OK|MB_ICONINFORMATION );
    // Free the buffer.
    LocalFree( lpMsgBuf );
    }
    Donc ne pas se contenter d'exploiter true dans cette chasse au bug mais faire écho de l'erreur si on a false !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(...)
        {
        }
    else
        {
        // on supprime lorsque le bug est trouvé ... 
        // ou si on commence à se douter qu'il est ailleurs
        ShowLastError(); 
        }
    A plus !
    J'arrive pas à utiliser .. si sa ne te dérange pas je peut t'envoyer mon code pour voir ce qui marche pas..

  17. #17
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    comme promis j'ai fais un test et aucun problème !

    creer 1 forme et place :

    SaveDialog1 ; OpenDialog1 ; Mémo ; 3 boutons

    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
     
            TMemo *Memo1;
     
            TButton *cherche;
            TButton *copie;
            TButton *lire;
            TButton *Copie_lecture;
     
            TOpenDialog *OpenDialog1;
            TSaveDialog *SaveDialog1;
     
            void __fastcall copieClick(TObject *Sender);
            void __fastcall chercheClick(TObject *Sender);
            void __fastcall lireClick(TObject *Sender);
            void __fastcall Copie_lectureClick(TObject *Sender);
    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
     
    void __fastcall TForm1::chercheClick(TObject *Sender)
    {
      if (OpenDialog1->Execute())
      {
         OpenDialog1->FileName;
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::copieClick(TObject *Sender)
    {
      if (SaveDialog1->Execute())
      {
         CopyFile(OpenDialog1->FileName.c_str(),
                  SaveDialog1->FileName.c_str(),
                  false
                 );
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::lireClick(TObject *Sender)
    {
      Memo1->Clear();
     
      Memo1->Lines->LoadFromFile(SaveDialog1->FileName);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Copie_lectureClick(TObject *Sender)
    {
    copieClick(Sender);
    lireClick(Sender);
    }
    //---------------------------------------------------------------------------
    voila , je sais pas faire plus , ou alors poste ton code
    @+

  18. #18
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    Je ne voie pas dans ton code la liberation du pointeur du fichier si il y a

    j'avoue que je n'ai jamais fais une lecture de fichier de cette manière

    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::ifstream fichier("C:\\Documents and Settings\\Ahmed\\Bureau\\code\\azerty2.dfm");
        if(fichier)
        {
            std::string ligne;
     
            while (std::getline(fichier,ligne))
     
    ....
    }
    voici comment je fais une lecture de fichier( jamais de problème )
    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
     
     
    FILE *Fichier;  // pointeur de fichier
    char *buf;     // ou chat buf[valeur] ; va contenir chaque ligne du fichier
     
    // ouverture du fichier en : 
    // mode Lecture : "r" ; 
    // mode ecriture : "w"
    // lecture binaire : "rb"
    // mode écriture a la fin du fichier "a+"
     
    Fichier = fopen(Edit1->Text.c_str(), "r"); 
     
    // ouverture echoué -> on sort
    if(Fichier==NULL) return;
     
    // tant qu' on est pas a la fin du fichier
    while(!feof(Fichier))
    {
         // on vide buf
         memset(buf, 0, sizeof(buf));
     
         // lecture d'une ligne entière du fichier va dans -> buf
         fread(buf, 1, sizeof(buf), Fichier);
     
        ..... ton traitement
    }
    // libération du pointeur du fichier pour permettre un réouverture
    fclose(Fichier);
     
    sans cette libération tu ne sera même pas supprimer le fichier manuellement.  msg : le fichier est utilisé par un autre programme !!

    voila, a toi de jouer

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    j'ai meme essayé sa et sa ne marche pas pour moi..

    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
     
    TForm1 *Form1;
    AnsiString filename;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString Fic;
    TStringList *pSL;
     
    Fic= "filename";
    pSL=new TStringList;
    pSL->LoadFromFile(Fic);
     
    // Traitement du fichier
     
    delete pSL;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    if (OpenDialog1->Execute())
     
       filename = OpenDialog1->FileName;
     
    }
    //---------------------------------------------------------------------------

  20. #20
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    pourquoi tu fais :
    Fic= "filename"; ???????

    c'est plutôt : Fic= filename // pas de guillement

    avec ce que je t posté avant essaye de lire copier et lire un fichier sans ton traitement.

    fais les choses pas à pas , et utilise le debogueur de builder pour vérifier
    sur qu'elle ligne il a y a un problème.

    voila , bonne chance @+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/03/2012, 22h47
  2. Réponses: 13
    Dernier message: 30/11/2011, 09h04
  3. Réponses: 1
    Dernier message: 18/11/2008, 21h42
  4. Lecture de fichier image dans un dossier avec java
    Par dreamnos dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2008, 10h25
  5. Lire un fichier situé dans 2 sous dossier...
    Par Pleymo dans le forum Langage
    Réponses: 10
    Dernier message: 08/12/2005, 09h30

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