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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    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 confirmé
    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
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    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 confirmé
    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
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    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 expérimenté
    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
    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.

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