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 :

Utilisation d'un StreamReader pour lire un fichier texte en Ressource


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Utilisation d'un StreamReader pour lire un fichier texte en Ressource
    Bonjour

    Mon projet utilise des données statique qui doivent etre lure a partir d'un fichier texte

    Le plus simple est evidement d'inclure ce fichier texte en ressources plutot que de l'installer sur un repertoire spécifique et d'aller le lire depuis ce repertoire

    Mon souci c'est que je voudrais utiliser sans trop bricoler la méthode de lecture existante qui lit le fichier a partir d'un streamreader
    Mais je ne parviens pas a deteminer la methode la plus simple pour lire ce fichier en ressource a partir d'un streamreader
    J'ai lu plusieurs post a ce sujet sur différents Forums et j'ai trouvé autant de réponses, certaines farfelure, d'autre non fonctionelle bref un peu n'importe quoi !

    Ceci par exemple rends null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          var Ob = Assembly.GetExecutingAssembly().GetManifestResourceStream("asm_1112");
    Ceci aussi rends null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stream S = Assembly.GetExecutingAssembly().GetFile("asm_1112");
    Ceci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          byte[] aa = Properties.Resources.asm_1112;
          MemoryStream MS =new MemoryStream(aa);
          StreamReader sr = new StreamReader(MS);
    Mais ce n'est certainement pas la solution que je trouve la plus élégante

    Avez vous d'autres suggestions ?
    Merci pour votre aide
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Salut

    Si tu as modifié les propriétés du fichier pour qu'il soit en « ressource incorporée » (ou « embedded resource » si tu bosses sur la version anglophone), alors ta première approche est la bonne. D'après ce que tu montres, ce qui n'est pas bon dans ton exemple est le chemin d'accès au fichier à charger. Il faut utiliser le namespace complet du fichier. Imaginons que j'ai un fichier « dummy.txt qui se trouve dans un répertoire « files » d'un projet dont le namespace racine est « myRootNamespace », alors il faut utiliser la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("myRootNamespace.files.dummy.txt");

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Max

    Ce que j'ai fait pour mettre mes fichiers en ressource est un simple Drag&Drop dans le tab Ressources du projet de mes deux fichier texte

    Mon intention étant précisément d'échapper a la contrainte de devoir recopier ces fichier dans un répertoire dédicacé et d'enregistrer l'emplacement

    Donc le but n'est pas d'enregistrer le chemin du fichier mais bien le fichier lui meme

    A ce stade et avec la maniere que j'ai utilisée pour mettre mes fichier en ressource la seule solution fontionelle que j'ai trouvée est celle que j'ai indiquée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          byte[] aa = Properties.Resources.asm_1112;
          MemoryStream MS =new MemoryStream(aa);
          StreamReader sr = new StreamReader(MS);
    J'y vois deux inconvénient :
    1- La transition Byte[]->MemoryStream->StreamReader un peu brico
    2- La nécessité designer la ressource explicitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties.Resources.asm_1112;
    au lieu de pouvoir utiliser une Clef Je survit avec cette solution faute de mieux !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Si tu fais un drag&drop du fichier dans l'onglet de ressources c'est le fichier de ressources (incluant ton fichier de données) qui sera répertorié dans l'application et tu devras passer par lui et l'accès Properties.Resources.asm_1112 pour récupérer tes données. En revanche tu peux spécifier comme action de génération pour ton ficher "Ressource incorporée" (il te faudra penser à retirer le fichier du fichier de ressources). Dans ce cas le fichier sera inclu dans l'assembly et tu pourras y accéder avec la méthode que te propose Max. Tu pourrais même te rajouter un chemin de fichier alternatif dans les settings de l'assembly, à éventuellement spécifier dans le App.config du client, et utiliser par défaut ton fichier si le chemin de fichier alternatif est vide où ne mène pas à un fichier valide.

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Noxen

    Je vais jeter un oeuil pour voir comment faire ça (Incorporer sans passer par le Drag & Drop)
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Hello,
    De mémoire, il me semble que l'astuce pour faire ce que tu veux consiste, dans l'affichage des ressources, à changer le type de fichier de "text" en "binary".

  7. #7
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Citation Envoyé par olibara Voir le message
    Je vais jeter un oeuil pour voir comment faire ça (Incorporer sans passer par le Drag & Drop)
    Ajoute ton fichier au projet de façon classique (Ajouter->Élément existant, ou Ajouter->Nouvel élément puis copier-coller du contenu), puis dans les propriétés du fichier tu choisis Action de génération = Ressource incorporée.

Discussions similaires

  1. Bug avec l'utilisation d'un scanner pour lire un fichier
    Par mazertys17 dans le forum Android
    Réponses: 1
    Dernier message: 29/01/2016, 04h48
  2. Réponses: 6
    Dernier message: 23/05/2012, 15h27
  3. Réponses: 2
    Dernier message: 04/02/2011, 18h59
  4. Méthode pour lire un fichier texte
    Par toutounesan dans le forum C++
    Réponses: 2
    Dernier message: 25/09/2007, 18h31
  5. code Javascript pour lire un fichier texte
    Par DEV-10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/10/2006, 22h49

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