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

  1. ###raw>post.musername###
    Membre du Club
    lire un fichier avec fopen mais en mettant une variable dans le chemin d'acces
    bonjour a vous ,vous qui me lirez
    le titre veut tout dire , j'espere que ce sera assez claire pour vous.
    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
     
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main(){
    FILE*fichier=NULL;
    char s[20]="Desktop";
     
    fichier=fopen("c:\\Users\\user\\"%s"\\fichier.txt",s,"r");
    if(fichier){
    cout<<"le fichier est  ouvert"<<endl;
    }
    }

    le probleme est avec fichier=fopen....
    il me met une erreur , pour etre franc je m'en doutais , quand j'ai ecris ca , ca fesait assez bizarre..
    j'ai regardé sur internet et a parement je dois inserer un snprintf mais je coince , je dois creer une variable du genre d=snprintf(mettre mon chemin d'acces ) et ensuite mettre fopen(d)?
    si vous pouviez m'eclairer et me donner un exemple ca serait parfait , merci d'avance
    ps : soyer pas trop dur avec moi je debute dans la programmation
      0  0

  2. #2

  3. ###raw>post.musername###
    Membre régulier
    je dois creer une variable du genre d=snprintf(mettre mon chemin d'acces ) et ensuite mettre fopen(d)?
    C'est plus ou moins ça, si tu regardes le man de sprintf tu peux voir qu'il revoit le nombre de caractères écrits, ce n'est pas ce que tu veux avoir, il faut que tu lui passe en paramètre la chaine de caractère que tu veux remplir, le texte à mettre et si il le faut des paramètres supplémentaire (comme printf).

    Ici ça donnerait quelque chose du genre :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FILE  *fichier;
    char  s[20] = "Desktop";
    char  path[SIZE];// où SIZE est la taille du chemin + celle de s
     
    if (sprintf(path, "c:\\Users\\user\\%s\\fichier.txt",s) == 0)
      return ; // en cas d'erreur on arrête
    // ici on a écrit comme le ferais printf dans un terminal, mais dans la chaine path 
     
    fichier = fopen(path, "r");
    etc...


    Voilà et si jamais tu as un problème avec une fonction, pour savoir s' il est possible de passer tel ou tel paramètre, regarde son manuel tu trouveras plus rapidement ta réponse.
      0  0

  4. #4
    Rédacteur/Modérateur

    Bonsoir,

    quitte à vouloir faire du C++, autant en faire pour de vrai.
    std::fstream et std::string
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Modérateur

    Le sujet était à l'origine dans le forum C mais comme ça sentait le C++, je l'ai déplacé en espérant que les connaisseurs C++ donnent des solutions plus adaptées. Exactement comme tu viens de le faire Bousk, merci

  6. #6
    Expert éminent sénior
    Bonjour,

    Citation Envoyé par Bousk Voir le message
    Bonsoir,

    quitte à vouloir faire du C++, autant en faire pour de vrai.
    std::fstream et std::string
    Comme le titre du sujet parle de "variable" en général et non uniquement de string, je me permet de rajouter std::stringstream.
    "Parce que le diable est dans les détails, une vision sans nuance ne peut prétendre à la compréhension du monde."

    Mon ancienne page perso : https://neckara.developpez.com/

  7. #7
    Membre du Club
    merci a tous :)
    ca marche alors merci c'est sympa de m'avoir aidé a charge de revanche peut etre un jour :p

  8. #8
    Modérateur

    Merci de cliquer sur le bouton en bas de l'écran pour marquer la discussion comme telle.

  9. #9
    Membre émérite
    Citation Envoyé par Neckara Voir le message
    Comme le titre du sujet parle de "variable" en général et non uniquement de string, je me permet de rajouter std::stringstream.
    Je crois que stringstream est (très) coûteux.

  10. #10
    Expert éminent sénior
    Citation Envoyé par oodini Voir le message
    Je crois que stringstream est (très) coûteux.
    La lecture de fichier est "très coûteuses", je ne penses donc pas que stringstream soit critique ou "trop coûteux" en comparaison.

    Ensuite, qu'entends-tu par "très coûteux" ?
    "Parce que le diable est dans les détails, une vision sans nuance ne peut prétendre à la compréhension du monde."

    Mon ancienne page perso : https://neckara.developpez.com/

  11. #11
    Membre émérite
    Citation Envoyé par Neckara Voir le message
    La lecture de fichier est "très coûteuses", je ne penses donc pas que stringstream soit critique ou "trop coûteux" en comparaison.
    C'est vrai que dans ce cas précis, mon propos n'était pas forcément pertinent.
    Mais si tu on se situe dans un cas général, il est bon d'avoir à l'esprit le coût des stringstreams par rapport aux fonctions C.

    Citation Envoyé par Neckara Voir le message
    Ensuite, qu'entends-tu par "très coûteux" ?
    J'avais un lien qui présentait des comparaisons, mais je ne le trouve plus.
    En revanche, j'ai celui-là.

  12. #12
    Expert éminent sénior
    23 fois plus lent, ce n'est pas grand chose ici surtout que ce n'est pas vraiment le but de stringstream de convertir des string en int.
    "Parce que le diable est dans les détails, une vision sans nuance ne peut prétendre à la compréhension du monde."

    Mon ancienne page perso : https://neckara.developpez.com/