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 :

Chemin d'accès en variable dans un streamreader ?


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Chemin d'accès en variable dans un streamreader ?
    Bonjour, je voudrais poser une petite question qui bloque ma progression sur un programme.

    Je vous explique :

    J'utilise un StreamReader pour que le programme lise un fichier spécifique, la syntaxe du chemin d'accès ce fait donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (StreamReader lefichier = new StreamReader(@"C:\\lechemindacces\lefichier"))
    {
    lecode
    }
    Mais voilà le soucis, j'ai besoin de mettre tout le chemin d'accès dans une variable car le nom du fichier et meme son emplacement peut changer en fonction de ce que l'utilisateur écrit dans un fichier txt "parametre"

    le soucis c'est que du coup, il n'accepte pas cette syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (StreamReader lefichier = new StreamReader(@lavariable))
                {
    lecode
             }
    enfin si il accepte la syntaxe, mais en exécution ca plante, du coup je vois pas comment remédier au problème une idée ?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string lavariable = @"C:\\lechemindacces\lefichier.txt"
    using (StreamReader lefichier = new StreamReader(lavariable))
                {
    //lecode
             }
    ne mets pas l'arobase devant la variable, n'oublie pas l'extension du fichier.

    Cela devrait fonctionner.

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Alors oui dans ton cas ca fonctionne mais c'est un poil plus complexe que ça dans mon contexte, et ca ne fonctionne du coup pas.

    Je montre un bout de code, si ca peut aider a comprendre le pourquoi du comment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     DateTime dateJour = DateTime.Now;
     
                int moisJourint = Convert.ToInt32(dateJour.Month);
                moisJourint -= 1;
                String moisJour = "0" + Convert.ToString(moisJourint);
                String FileName = chemin + moisJour + dateJour.Year + ext;
                Console.Write(FileName); Console.ReadKey();
     
                using (StreamReader fichierlog = new StreamReader(FileName))
    {
    //lecode
    }
    Je précise que lors du console.write(FileName) j'ai bien comme résultat @"C:\\lechemindacces\lefichier.txt"

    D'où la non compréhension

    Pour la précision le chemin est une variable dont la valeur est donné lors de la lecture du fichier parametre, pareille pour ext (l'extension). Pour la date qui accompagne le nom du fichier elle s'adapte toute seul car il y a un fichier de produit par mois (avec une date pour différencier)

    je sais pas si je me fais bien comprendre ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Tu as un message d'erreur lorsque ça plante ?
    Si oui que dit il ?

    Lorsque tu exécutes C:\\lechemindacces\lefichier.txt dans l'explorateur Windows, le fichier s'ouvre bel et bien ?

    A+

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Ouep je retrouve bien le chemin et ca me met "caractère non conformes dans le chemin d'accès"

    Pourtant je vois vraiment pas ce qui le dérange, le @ ? si c'est ça comment faire ?

    Ou alors c'est parce que c'est en variable ? je ne comprends pas

  6. #6
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Alors déjà,
    Je précise que lors du console.write(FileName) j'ai bien comme résultat @"C:\\lechemindacces\lefichier.txt"
    Si tu obtiens ça @"C:\\lechemindacces\lefichier.txt" avec console.write(FileName) pour moi c'est faux.

    Je n'ai pas l'impression que tu sache réellement à quoi sert le @ devant une chaine de caractère, donc il sert à 'échapper' toute la chaine sans avoir à se soucier de son contenu. Avant, et c'est toujours d'actualité, on utilisait le \ pour 'echapper' des caractères de la chaine, comme par exemple pour obtenir un \ on devait avoir dans la chaine \\. Donc quand je vois que dans ta chaine de résultat, tu as déjà un double anti-slash, je me pose des questions sur le fait d'échapper la chaine avec @.
    Cela étant dit, va faire un tour pour en savoir plus sur l’échappement de chaine.
    Donc, ton write aurait dû te donner comme résultat C:\\lechemindacces\lefichier.txt (en faisant l'impasse sur l'anti-slash).

    Bon, maintenant que tu sais à quoi il sert, pourquoi essayer de mettre un @ dans ta variable ?
    Au pire, se sont les composantes que tu concatène qui doivent être 'échappée'.
    Au mieux, utilise la classe Path, pour construire ton chemin.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    En faite il n'y a pas deux slash, c'était juste pour l'exemple de la chaine le réel chemin d'accès (sans donner les vrais noms) ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chemin = @"E:\quelquechose\quelquechose\quelquechose\lefichier
    ext = .txt"
    Pour le rappel FileName = chemin + date + ext

    au final il ressemble a ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    filename = @"E:\quelquechose\quelquechose\quelquechose\lefichierladate.txt"

  8. #8
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Oui, donc je ne vois pas ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    chemin = @"E:\quelquechose\quelquechose\quelquechose\lefichier"
    ext = ".txt"
    date = {Ton traitement de récup}
    
    cheminFinal = chemin + date + ext
    Là dedans, pour moi, seul chemin à besoin d'être 'échappé' et il l'est grâce au @ et en sortie tu devrais avoir quelque-chose comme E:\quelquechose\quelquechose\quelquechose\lefichier0615.txt dans la variable cheminFinal que tu peux utiliser directement dans le constructeur de ton StreamReader.

    Par ailleurs, pour le traitement de ta date, regarde pour faire quelque-chose de plus propre.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Mais justement il est là le problème, le chemin finale est bien écrit en variable, il n'a théoriquement aucune raison de refuser et planter, je suis perdu...

    (pour la date c'est pas un soucis ca fonctionne)

    Je ne comprends réellement pas et toute tentative de trouver une solution s'éloigne de plus en plus

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    re,

    Ouep je retrouve bien le chemin et ca me met "caractère non conformes dans le chemin d'accès"
    Peut être peux tu nous donner le réel chemin complet ?
    Quand tu dis, que tu retrouves bien le chemin, tu le cherches répertoire par répertoire ou tu copies/colles l'intégralité du chemin dans l'explorateur ?

    (édit : j'avais oublié une phrase.)

    A+

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Bon je recommence l'explication :

    le chemin du fichier que je met au moment du streamreader normalement s'affiche comme ceci (et doit s'inscrire comme ceci pour fonctionner)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (StreamReader fichierlog = new StreamReader(@"E:\Dossier\fichier052015.fichier01.txt"))
                {
    //lecode
    }
    Mais la date qui correspond au fichier, son extension et le chemin, doit etre fait en 3 variables puis fusionner en une seule)

    le chemin et l'extension et renseigné dans un autre fichier txt que le programme lis, la date elle, se fait toute seule.

    on a donc un résultat de ce genre
    chemin = @"E:\Dossier\fichier
    extension = .fichier01.txt"
    chemindufichier = chemin + date + extension

    maintenant voilà le paradoxe :
    si on fait manuellement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chemindufichier = @"E:\Dossier\fichier052015.fichier01.txt";
    using (StreamReader fichierlog = new StreamReader(chemindufichier))
                {
    //lecode
    }
    la ça fonctionne.

    mais si je reprends les explications d'avant
    et que je fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chemin du fichier = chemin + date + extension;
    using (StreamReader fichierlog = new StreamReader(chemindufichier))
                {
    //lecode
    }
    Et bien là ca plante ! j'ai donc mis un console.write(chemindufichier) console.readkey();
    histoire de voir si dans les deux solutions il y avait des différences au résultat obtenu mais non ! on en vient exactement au même résultat, alors pourquoi ca ne fonctionne pas ?

    juste wtf... si on pouvait me sortir de là, quelque chose m'échappe

  12. #12
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Donc, si le chemin final te semble correct et au vu de l'erreur que tu nous donne, je dirais que ton chemin est faux
    Voici la liste des caractères interdits par Windows dans les noms de fichier et de répertoires \/:*?"<>| avec exception pour \: pour les répertoires.

    Tu n'aurais pas un de ces caractères dans ton chemin final ?
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  13. #13
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Je vais me répéter, mais la valeur de ton chemin final (consultée via le debugger ou un Console.Write()) doit ressemblée à ça E:\Dossier\fichier052015.fichier01.txt et en aucun cas à ça @"E:\Dossier\fichier052015.fichier01.txt".

    Et comme précédemment, tu nous met
    chemin = @"E:\Dossier\fichier
    extension = .fichier01.txt"
    ce qui porte à confusion car il manque des guillemets, ce qui me fait penser que ce sont les valeurs que tu écris et pas la déclaration.
    Relis mon exemple plus haut.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    OH MON DIEU !

    Merci Kyroon, j'ai modifié pour que le chemin ne comporte pas de @" et pareille pour l'extension je lui ai enlevé le guillemet, merci !!!

    ca fonctionne !!

  15. #15
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Heureux pour toi

    Tu peux passer le post en

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/09/2009, 16h32
  2. [XL-2003] Stocker le chemin d'accès à un fichier dans un autre fichier.
    Par juanito37 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/07/2009, 15h10
  3. Comment afficher un chemin d'accés de fichier dans un edit text?
    Par rakinetak dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 18/08/2008, 10h44
  4. Accès à des variables dans une fonciton static
    Par AdrienIT dans le forum SL & STL
    Réponses: 5
    Dernier message: 30/08/2007, 13h37
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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