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 Discussion :

ouvrir fichier texte


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Par défaut ouvrir fichier texte
    Bonjour, j'ai un fichier texte situé dans un sous repertoire(sous_dossier) d'un repertoire (repertoire). Exemple: repertoire: c:/ et sous-repertoire c:/sous_dossier/. Or le repertoire peut etre aleatoire donc pour ouvrir le fichier je fais cela, mais le prog ne compile pas du fait d'une erreur d'addition de pointeur. Comment resoudre ce probleme ? merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILE * fp;
    fp = fopen(repertoire.c_str() + "sous_dossier\\fichier.txt", "r");

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ac/dc
    Bonjour, j'ai un fichier texte situé dans un sous repertoire(sous_dossier) d'un repertoire (repertoire). Exemple: repertoire: c:/ et sous-repertoire c:/sous_dossier/. Or le repertoire peut etre aleatoire donc pour ouvrir le fichier je fais cela, mais le prog ne compile pas du fait d'une erreur d'addition de pointeur. Comment resoudre ce probleme ? merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILE * fp;
    fp = fopen(repertoire.c_str() + "sous_dossier\\fichier.txt", "r");
    strcat() est ton amie...

  3. #3
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    En C, on ne peut pas concaténer deux chaînes avec un opérateur "+".
    Comme dit plus haut, il faut utiliser une fonction comme strcat().

  4. #4
    Membre éclairé Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Par défaut
    salut, j'ai deja essayé !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *tmp;
    strcpy(tmp, repertoire.c_str());
    strcat(tmp, "sous_dossier\\fichier.txt");
    FILE * fp;
    fp = fopen(tmp , "r");
    sinon j'ai voulu travailler avec TFileStream (je travaille sur c++ builder mon message a été déplacé ici) mais je n'obtiens pas ce que je veux

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ac/dc
    salut, j'ai deja essayé !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *tmp;
    strcpy(tmp, repertoire.c_str());
    strcat(tmp, "sous_dossier\\fichier.txt");
    FILE * fp;
    fp = fopen(tmp , "r");
    sinon j'ai voulu travailler avec TFileStream (je travaille sur c++ builder mon message a été déplacé ici) mais je n'obtiens pas ce que je veux
    Connais pas, ici c'est un forum sur le C ANSI/ISO essentiellement. Si tu programme en C Standard peut-être que tu auras des réponses mais là c'est spécifique à C++ Builder et il existe un sous-forum pour cet EDI !

    Maintenant si ca marche pas c'est normal, tu as appris le C sur C++ Builder je pari mais pas avec un vrai livre sur le "vrai" C et avec un vrai EDI pour le C ! Ton pointeur tmp, il faudrait peut-être lui allouer un espace mémoire avant de vouloir lui copier une chaîne et d'en concaténer une.

    Tu dois allouer un espace assez grand pour contenir les deux chaînes plus le zéro de fin de chaîne. Test aussi le retour de fopen car l'ouverture peut aussi échouer !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Franck.H
    Ton pointeur tmp, il faudrait peut-être lui allouer un espace mémoire avant de vouloir lui copier une chaîne et d'en concaténer une.
    Je sais que tu sais, mais attention à la terminologie confusante. Après ça, les gens croient qu'un pointeur, c'est une mémoire élastique, ce qui est évidement faux. Je propose de modifier ce texte ainsi :

    "Ton pointeur tmp, il faudrait peut-être qu'il pointe sur un espace mémoire valide avant de vouloir copier une chaine et d'en concaténer une".

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ac/dc
    salut, j'ai deja essayé !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *tmp;
    strcpy(tmp, repertoire.c_str());
    strcat(tmp, "sous_dossier\\fichier.txt");
    FILE * fp;
    fp = fopen(tmp , "r");
    sinon j'ai voulu travailler avec TFileStream (je travaille sur c++ builder mon message a été déplacé ici) mais je n'obtiens pas ce que je veux
    Si tu n'es pas encore à l'aise avec l'allocation dynamique de mémoire, je te conseille de passer par un tableau statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define STR_SIZE 100
    char tmp[STR_SIZE +1];

  8. #8
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Voici un exemple concret d'un bout de code pour la concaténation de deux chaines.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
     
    /**
     * @brief Concatène deux chaines de caractères
     * @param[in] str1 Première chaine à concaténer
     * @param[in] str2 Seconde chaine à concaténer
     * @return Une chaine de caractères contenant le resultat de la concaténation de str1 et str2
     * 
     * Attention, après utilisation de cette fonction, libérer le résultat obtenu si != NULL
     */
    char * concat( const char * str1, const char * str2 ) {
        /* Taille de la première chaîne */
        int size_of_str1 = ( str1 ? strlen( str1 ) : 0 );
        /* Taille de la seconde chaîne */
        int size_of_str2 = ( str2 ? strlen( str2 ) : 0 );
        /* Pointeur qui récupèrera le résultat de la concaténation */
        char * result = NULL;
     
        /* 
         * Il faut au minimum l'une des deux chaînes de caractères 
         * pour opérer une concaténation.
         */
        if( NULL != str1 || NULL != str2 ) {
            /*
             * Allocation de la mémoire pour concaténer les deux chaînes de caractères.
             * La taille de la nouvelle chaîne de caractères est le résultat de l'addition 
             * de la taille des deux chaines et de 1 ( taille nécessaire pour le 0 terminal. 
             * */
            result = ( char * ) malloc( sizeof( char ) * ( size_of_str1 + size_of_str2 + 1 ));
            if( NULL != result ) {
                /*
                 * La zone mémoire qui sera la résultat de la concaténation a été allouée correctement.
                 */
                if( NULL != str1 ) {
                    /* Concaténation de la première chaine */
                    strcat( result, str1 );
                }
                if( NULL != str2 ) {
                    /* Concaténation de la seconde chaine */
                    strcat( result, str2 );
                }
            }
        }
        /*
         * On retourne le résultat de la concaténation
         */
        return result;
    }
     
    void test_concat( FILE * output, const char * str1, const char * str2 ) {
        char * result = 0;
        if( str1 ) {
            fprintf( output, "str1: %s\n", str1 );
            fprintf( output, "taille de str1: %d\n", strlen( str1 ));
        }
        if( str2 ) {
            fprintf( output, "str2: %s\n", str2 );
            fprintf( output, "taille de str2: %d\n", strlen( str2 ));
        }
        result = concat( str1, str2 );
        if( result ) {
            fprintf( output, "result: %s\n", result );
            fprintf( output, "taille de result: %d\n", strlen( result ) );
            free( result );
        }
    }
     
    int main( int argc, char ** argv ) {
        test_concat( stdout, 0, 0 );
        test_concat( stdout, "bon", "jour" );
        test_concat( stdout, 0, "jour");
        test_concat( stdout, "bon", 0 );
        return 0;
    }
    En espérant t'avoir aidé.

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

Discussions similaires

  1. Ouvrir fichier texte
    Par jean-poil dans le forum LabVIEW
    Réponses: 2
    Dernier message: 13/01/2010, 12h52
  2. [XL-2007] Ouvrir fichier texte dans feuille
    Par iperkut dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 30/10/2009, 10h12
  3. [C# 2.0] Ouvrir fichier texte dans editeur par défaut
    Par lenoil dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2007, 16h19
  4. Ouvrir Fichier texte
    Par eiffel74 dans le forum ASP
    Réponses: 3
    Dernier message: 03/04/2007, 20h18
  5. [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

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