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

Framework .NET Discussion :

Contenu d'un objet de type FileStream


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Contenu d'un objet de type FileStream
    Bonsoir,

    D'après mes connaissances, un fichier de type FileStream contient une sequence de bytes.

    Cependant, ces bytes sont ils représentés sous forme binaire, hexadécimale ou pas forcément.

    Quand je déboggue le programme suivant, je constate que dans le fichier de destination collection_nombres.bin, les données apparaissent au format hexadecimal.

    Est-ce toujours ainsi ou cela varie -t-il (format binaire par exemple)en fonction de certains facteurs ?

    Les données du fichier destFile de type FileStream qui migrent vers le fichier de destination collection_nombres.bin sont elles stockées automatiquement au même format dans ces deux fichiers?

    Pour finir,pouvez-vous me confirmer qu'un objet de type Stream n'est utile en soi que parce qu'on peut accéder à ses données par le biais d'un objet de type BinaryReader ou BinaryWriter ou encore de type StreamReader ou StreamWriter.

    Autre question : en quoi utiliser un objet de type FileStream améliore les performances d'une application?

    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
     
    public void test_writer()
           {
     
               //création d'un BinaryWriter
               string destinationFilePath = @"C:\Users\har@43\Documents\collection_nombres.bin";
               //Collection de bytes
               byte[] dataCollection = {1,4,6,7,12,33,26,98,82,101};
               //création d'un objet de type fileStream par le biais  dulequel on peut interagir avec le ficher source
     
               FileStream destFile= new FileStream(destinationFilePath, FileMode.Create,FileAccess.Write);
               //on crée un objet de type BinaryWriter qui agit sur l'objet de type Stream
               BinaryWriter writer  = new BinaryWriter(destFile);
               //on ecrit chaque byte verrs le stream
               foreach (byte data in dataCollection){
                   writer.Write(data);
               }
               //fermeture du stream et de l'objet  BinaryWriter pour que les données soient inscrites
               //dans le fichier de destination
     
               writer.Close();
               destFile.Close();
     
           }

    Pour finir, quand on lit par la méthode Read , les données contenues dans un dans un objet de type StreamReader, provenant d'un fichier texte, on obtient , par le biais d'un conversion en char, le caractère lu , comme le montre le code ci-dessous.
    On sait que la méthode Read retourne une valeur de type int qui est celle de la valeur du byte lu; je ne comprends pas alors que la conversion en char puisse fonctionner .

    Je vous remercie beaucoup de bien vouloir m'aider sur ce point.

    Cordialement.

    new_wave

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    StreamReader reader = new StreamReader(sourceFile);
    StringBuilder filecontents = new StringBuilder();
    while(reader.Peek()!=-1){
    fileContents.Append((char)reader.Read());
     
    }
    string Data = fileContents.ToString();
     
    reader.Close();
    sourceFile.close();


    Merci beaucoup de votre aide sur tous ces points .

    Cordialement.

    curieuse_prog

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par new_wave Voir le message
    D'après mes connaissances, un fichier de type FileStream contient une sequence de bytes.
    Ça n'a pas beaucoup de sens ; un fichier est un fichier, il n'est pas "de type FileStream". FileStream est une classe utilisée pour accéder au contenu d'un fichier. Un objet FileStream représente un "curseur" sur un fichier ouvert. En soit, il ne "contient" rien, c'est le fichier qui contient les données.

    Citation Envoyé par new_wave Voir le message
    Cependant, ces bytes sont ils représentés sous forme binaire, hexadécimale ou pas forcément.
    La encore, ça n'a pas vraiment de sens. Sur les disque, les données sont toujours en binaire. L'hexadécimal est juste une représentation souvent utilisée parce qu'elle est un peu plus pratique pour des humains. Un FileStream n'a absolument pas besoin d'une représentation particulière des données, que ce soit hexadécimal ou autre chose ; il manipule des bytes sous forme binaire, et c'est tout.

    Citation Envoyé par new_wave Voir le message
    Quand je déboggue le programme suivant, je constate que dans le fichier de destination collection_nombres.bin, les données apparaissent au format hexadecimal.

    Est-ce toujours ainsi ou cela varie -t-il (format binaire par exemple)en fonction de certains facteurs ?
    Bah ça dépend avec quoi tu ouvres ce fichier. Si tu ouvres un fichier JPG dans la visionneuse Windows, tu verras une image ; si tu ouvres le même fichier avec un éditeur hexadécimal, tu verras de l'hexadécimal ; si tu l'ouvres dans le bloc-notes, tu verras du texte illisible (puisque les données du fichier ne représentent pas du texte). Un fichier contient toujours des données binaires (vrai même un fichier texte) ; tout dépend ensuite de comment on interprète ces données pour leur donner un sens.

    Citation Envoyé par new_wave Voir le message
    Les données du fichier destFile de type FileStream qui migrent vers le fichier de destination collection_nombres.bin sont elles stockées automatiquement au même format dans ces deux fichiers?
    J'ai l'impression que tu t'emmêles les pinceaux... à te lire, on dirait que destFile et collection_nombres.bin sont 2 fichiers, alors que ce n'est pas du tout le cas. collection_nombres.bin est un fichier, destFile est un objet FileStream qui te permet de manipuler le contenu du fichier collection_nombres.bin.

    Citation Envoyé par new_wave Voir le message
    Pour finir,pouvez-vous me confirmer qu'un objet de type Stream n'est utile en soi que parce qu'on peut accéder à ses données par le biais d'un objet de type BinaryReader ou BinaryWriter ou encore de type StreamReader ou StreamWriter.
    Non, on peut très bien utiliser un Stream sans BinaryReader/Writer ou StreamReader/Writer. Dans ce cas on manipule directement des octets sous forme brute.
    - un Stream représente un flux binaire, c'est à dire une séquence d'octets, qu'on peut lire et/ou écrire. Le support peut être un fichier (FileStream), une zone de la mémoire (MemoryStream), une autre machine connectée (NetworkStream), bref, un peu ce qu'on veut.

    - StreamReader et StreamWriter servent à lire et écrire du texte dans un Stream, en utilisant un encodage spécifique (ISO-8859-1, UTF-8, etc). Ca permet de ne pas avoir à se préoccuper de comment représenter ce texte sous forme binaire.

    - BinaryReader et BinaryWriter servent à lire et écrire des données (essentiellement des nombres) dans un flux. Par exemple, pour écrire un nombre décimal de type double dans un fichier, si tu le faisais directement dans un Stream, il faudrait que tu connaisses la représentation binaire d'un double, qui est loin d'être simple. Le BinaryWriter s'occupe de ce genre de choses, si bien que tu as juste à dire que tu veux écrire un double.

    D'une manière générale, les Reader/Writer permettent de lire ou d'écrire quelque chose sans avoir à se préoccuper de la représentation sous-jacente.

    Citation Envoyé par new_wave Voir le message
    Autre question : en quoi utiliser un objet de type FileStream améliore les performances d'une application?
    En rien. Cette question n'a pas de sens : si tu as besoin d'accéder à un fichier, tu utilises un FileStream parce que tu n'as pas le choix, pas parce que ça améliore les performances. C'est comme si tu demandais "en quoi utiliser des roues améliore les performances d'une voiture"...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut représentation des données --notions de stream
    Bonjour et merci beaucoup de ta réponse.
    J'ai donc bien noté toutes tes explications et t'en remercie.

    Je m'excuse de la confusion que j'ai faite en écrivant qu'un "un fichier de type FileStream contient une sequence de bytes.".
    J'ai bien compris qu'il s'agit d'une variable de type Stream et non d'un fichier de ce type mais la fatigue aidant et associant souvent une variable de type Stream au contenu d'un fichier j'ai commis cette erreur.


    J'ai maintenant les questions auxquelles je te remercie de bien vouloir répondre:
    1-Comment les données contenues dans un Stream finissent par se retrouver dans un fichier de destination:Y-a-il un flush automatique du Stream vers le fichier de destination?

    2-Supposons que nous voulons écrire des données de type caractère dans un fichier texte de destination.
    Comment les données binaires contenues dans le Stream grâce à l'intervention d'un StreamWriter peuvent se retrouver sous forme caractère dans le fichier de destination alors qu'elles sont sous forme binaire dans le Stream.

    Merci beaucoup de ton aide sur ces deux points.

    Cordialement.

    new_wave

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par new_wave Voir le message
    1-Comment les données contenues dans un Stream finissent par se retrouver dans un fichier de destination:Y-a-il un flush automatique du Stream vers le fichier de destination?
    Dans le cas de FileStream, les données passent par un buffer (dont on peut éventuellement spécifier la taille, par défaut c'est 4Ko). Le buffer est flushé sur le disque quand c'est nécessaire, quand on appelle la méthode Flush, ou quand le Stream est fermé

    Citation Envoyé par new_wave Voir le message
    2-Supposons que nous voulons écrire des données de type caractère dans un fichier texte de destination.
    Comment les données binaires contenues dans le Stream grâce à l'intervention d'un StreamWriter peuvent se retrouver sous forme caractère dans le fichier de destination alors qu'elles sont sous forme binaire dans le Stream.
    Les données ne sont jamais "sous forme caractère dans le fichier", elles sont toujours sous forme binaire... Le fait de les traiter comme des caractères, c'est juste une façon d'interpréter les données binaires : tu sais que c'est un fichier texte, donc tu traites le contenu comme du texte. Tout ce que fait le StreamWriter, c'est transformer en binaire les données caractères qu'on lui passe, et les écrire dans le stream (qui les écrit ensuite sur le disque)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut contenu d'un objet de type FileStream
    Bonjour et merci beaucoup de ta réponse qui m'éclaircit un peu plus .

    Tu écris

    Les données ne sont jamais "sous forme caractère dans le fichier", elles sont toujours sous forme binaire... Le fait de les traiter comme des caractères, c'est juste une façon d'interpréter les données binaires : tu sais que c'est un fichier texte, donc tu traites le contenu comme du texte
    Très bien,donc qu'est ce qui traduit les données binaire sur disque en données texte à l'affichage.
    Quel est l'utilitaire qui s'en charge.

    Je te remercie de ta réponse.

    Cordialement.

    new_wave

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Très bien,donc qu'est ce qui traduit les données binaire sur disque en données texte à l'affichage.
    Quel est l'utilitaire qui s'en charge.
    Bah c'est le programme avec lequel tu ouvres le fichier (le bloc-notes par exemple).

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

Discussions similaires

  1. Récupérer type du contenu d'un objet
    Par Nemesis007 dans le forum C#
    Réponses: 2
    Dernier message: 05/09/2010, 15h44
  2. Accéder au contenu d'un objet de type XMLList
    Par Krusti dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 06/02/2009, 17h25
  3. [DOM] Récupérer contenu d'un objet de type org.w3c.dom.Document dans une chaine de caractèr
    Par danyboy85 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 18/01/2007, 10h38
  4. [Sérialisation] d'objets de types différents
    Par Amnesiak dans le forum Général Java
    Réponses: 3
    Dernier message: 08/12/2004, 22h28
  5. DB objet sous types heritage
    Par smex dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2004, 21h58

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