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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    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
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    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 habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    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
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    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 habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    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
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    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).

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type FileStream
    Je te remercie de tes réponses.
    tout est plus clair à présent.

    Puisqu' un objet de type BinaryReader permet de lire les données contenues dans un objet de type Stream, il est nécessaire donc qu'auparavant ces données aient été écrites dans cet objet de type Stream par un objet de type BinaryWriter.
    Est-ce exact?

    Si les données de départ sont contenues dans un fichier de type .bin est-il alors nécessaire qu'un objet de type BinaryWriter écrive ces données dans l'objet de type Stream pour que l'objet de type BinaryReader puisse les lire?

    Te remerciant encore de ta réponse.

    Bien cordialement.

    New_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  8. #8
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Non, un Stream ne "contient" rien, il permet juste d'accéder au contenu du fichier (dans le cas d'un FileStream). Si tu as un fichier qui contient déjà les données, tu ouvres un Stream en lecture sur ce fichier, et tu peux directement le lire avec BinaryReader

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type FileStream
    Bonjour et merci de ta réponse

    J'aimerais revenir sur le fait que tu écrives qu'un Stream ne contient rien.

    Pour ce que j'en sais, un objet de type FileStream contient un flux binaire.
    C'est en quelque sorte un curseur qui contient les données d'un fichier sous forme binaire.

    J'aimerais que nous soyons ok là dessus, sinon, je vais m'embrouiller un peu plus...
    Ensuite, quand j'écris cette portion de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string sourceFilePath =@"C:\Users\Student\Documents\BinaryDataFile.bin";
     
    FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
     
    BinaryReader reader = new BinaryReader(sourceFile);
    Quelle est l'instruction qui permet que les données du fichier BinaryDatafile.bin se retrouvent dans la variable sourceFile de type FileStream?

    Est-ce que du fait de cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
    Ou est-ce que les données du fichier BinaryDataFile.bin se retrouvent automatiquement dans le flux binaire sourceFile

    Merci encore beaucoup de ta réponse et de tout le temps que tu consacres à bien vouloir me répondre.

    Cordialement.
    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  10. #10
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Pour ce que j'en sais, un objet de type FileStream contient un flux binaire.
    C'est en quelque sorte un curseur qui contient les données d'un fichier sous forme binaire.

    J'aimerais que nous soyons ok là dessus, sinon, je vais m'embrouiller un peu plus...
    Non, je maintiens ce que je disais : au sens strict, le FileStream ne "contient" rien, c'est le fichier qui contient les données. Le FileStream maintient juste la position du curseur et permet de lire ou d'écrire dans le fichier. Après, par abus de langage, on peut bien sûr dire qu'un FileStream contient des données, et tout le monde comprendra, mais techniquement, c'est inexact.

    Citation Envoyé par new_wave Voir le message
    Ensuite, quand j'écris cette portion de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string sourceFilePath =@"C:\Users\Student\Documents\BinaryDataFile.bin";
     
    FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
     
    BinaryReader reader = new BinaryReader(sourceFile);
    Quelle est l'instruction qui permet que les données du fichier BinaryDatafile.bin se retrouvent dans la variable sourceFile de type FileStream?
    La création du FileStream sur ce fichier est suffisante pour que les données du fichier soient accessibles via le FileStream. Le FileStream permet de lire le contenu binaire brute du fichier, et le BinaryReader permet de les "décoder" en quelque chose d'exploitable.

    Citation Envoyé par new_wave Voir le message
    Est-ce que du fait de cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
    Oui

    Citation Envoyé par new_wave Voir le message
    Ou est-ce que les données du fichier BinaryDataFile.bin se retrouvent automatiquement dans le flux binaire sourceFile
    Pas automatiquement, il faut quand même dire à quel fichier correspond sourceFile... c'est ce que fait l'appel au constructeur de FileStream.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type FileStream
    Merci encore pour toutes ces précisions.

    Lorsque tu écris l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Create, FileAccess.Write);
    puis, à l afin du programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sourcefile.Close();
    Tu fermes bien l'objet sourcefile de type FileStream.
    Suite à cette fermeture, les données qu'il "contient"(entre guillemets" puisque tu n'acceptes pas ce terme)sont bien flushées vers le ficher système concerné par l'écriture.
    Ne peut-on pas dire donc que sourceFile "contient des données , même si c'est via un buffer.

    Par ailleurs, quelle est la différence exacte entre un objet de type BinaryReader et un objet de type StreamReader.
    Est-ce lié à la quantité de données que chacun peut lire?

    Pour finir, quandf j'écris l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fileContents.Append((char)reader.Read());
    La conversion en char est-elle la seule unique.
    D'après moi oui car on convertit par cette conversion la valeur binaire d'un caractère(valeur ASCII) en caractère

    Merci encore beaucoup de bien vouloir m'aider à préciser toutes ces notions.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  12. #12
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Suite à cette fermeture, les données qu'il "contient"(entre guillemets" puisque tu n'acceptes pas ce terme)sont bien flushées vers le ficher système concerné par l'écriture.
    Ne peut-on pas dire donc que sourceFile "contient des données , même si c'est via un buffer.
    Oui, il y a effectivement un buffer, qui a une taille limitée et est régulièrement flushé (à la fermeture, mais aussi dès que c'est nécessaire, par exemple parce qu'il est plein). Mais ça ne contient pas le fichier entier, juste une petite quantité de données (typiquement quelques Ko) ; cela sert à éviter de faire de très nombreuses écritures de petites quantités de données : plutôt que d'écrire les données immédiatement, le FileStream attend qu'il y en ait un peu plus pour tout écrire d'un coup.

    Citation Envoyé par new_wave Voir le message
    Par ailleurs, quelle est la différence exacte entre un objet de type BinaryReader et un objet de type StreamReader.
    Est-ce lié à la quantité de données que chacun peut lire?
    Non, c'est une question de nature des données.
    - StreamReader permet, à partir d'un flux binaire brut (Stream), de lire du texte selon un encodage donné (UTF-8, ISO-8859-1, etc).
    - BinaryReader, permet, à partir d'un flux binaire brut (Stream), de lire des valeurs de type primitif, comme int, double, DateTime, etc

    Citation Envoyé par new_wave Voir le message
    Pour finir, quandf j'écris l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fileContents.Append((char)reader.Read());
    La conversion en char est-elle la seule unique.
    D'après moi oui car on convertit par cette conversion la valeur binaire d'un caractère(valeur ASCII) en caractère
    Je ne comprends pas la question...

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type FileStream
    Bonjour et merci de ta réponse.
    C'est très bien, je suis rassurée quant à la définition que j'avais d'une variable de type FileStream.

    Tu expliques que la différence entre un StreamReader et un BinaryReader est que StreamReader permet, à partir d'un flux binaire brut (Stream), de lire du texte selon un encodage donné (UTF-8, ISO-8859-1, etc) alors que BinaryReader, permet, à partir d'un flux binaire brut (Stream), de lire des valeurs de type primitif, comme int, double, DateTime, etc
    Bien, soit les deux exemples suivants, le premier pour l'usage d'un BinaryReader, le second pour celui d'un StreamReader

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
      string sourceFilePath = @"C:\Users\pieces_labiche.txt ";
     
               FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
     
     
                BinaryReader reader = new BinaryReader(sourceFile);
     
                //on stocke la position courante dans le stream
                int position = 0;
     
                //on stocke la la longueur du flux(stream)
                int length = (int)reader.BaseStream.Length;
     
               MessageBox.Show("la longueur du texte a une valeur de" + length);
     
                //on crée un tableau DataCollection pour stocker chaque caractère du fichier 
     
                 char[] DataCollection = new char[length];
                //permet de stocker le byte courant
                int returnedByte = 0;
     
                while ((returnedByte = reader.Read()) != -1)
     
                {
     
                     DataCollection[position] = (char)returnedByte;
     
                   MessageBox.Show("la valeur du char courant dans  DataCollection est " + DataCollection[position]);
     
     
                    position += sizeof(byte);
     
     
                }//fin de while
     
     
                //on ferme les flux pour libérer toute gestion de fichier
                reader.Close();
                sourceFile.Close();*/
    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
     
     string sourceFilePath = @"C:\Users\har@43\Documents\livres_achat.txt";
                FileStream sourceFile = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read);
     
                StreamReader reader = new StreamReader(sourceFile);
                StringBuilder fileContents = new StringBuilder();
                while (reader.Peek() != -1)
                {
                    fileContents.Append((char)reader.Read());
                    fileContents.Append((char)reader.Read());
     
                }
                string Data = fileContents.ToString();
     
                reader.Close();
                sourceFile.Close();
    Que ce soit avec l'objet de type BinaryReader ou celui de type StreamReader je récupère des données binaires provenant d'un fichier .txt; la méthode Read permet de récupérer la valeur entière de chaque caractère selon la table ASCII.
    Puis ensuite je peux convertir cette valeur en caractère de type char.
    Où est alors la différence entre les deux objets.

    Te remerciant beaucoup de ton aide sur ce point.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  14. #14
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est juste que StreamReader est plus spécialisé pour le texte, et BinaryReader peut lire d'autres types de données.

    Soit dit en passant, ton code est beaucoup plus compliqué que nécessaire. Avec le StreamReader, il est rarement nécessaire d'utiliser la méthode Read : on utilise généralement ReadLine (qui lit une ligne entière) ou ReadToEnd (qui lit tout le reste du flux à partir de la position courante).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Data = reader.ReadToEnd();
    Pour BinaryReader, tu arrives à lire du texte avec, mais ce n'est pas du tout pratique : tu dois le faire caractère par caractère... Il y a bien une méthode ReadString, mais elle est prévue pour un format spécifique (chaine préfixée par sa longueur).

    Bref, les deux permettent de lire du texte, mais il y en a un qui est fait pour ça et pas l'autre, ce qui se ressent fortement dans la facilité d'utilisation...

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type FileStream
    Merci encore de ta réponse.

    Pour ce qui est des méthodes ReadLine() et ReadtoEnd() de la la classe StreamReader, elles retournent directement un String.
    Normalement, la lecture s'applique à des données binaires; peut-on en déduire qu'il y a eu une conversion en string(ou en char plusieurs fois) qui s'est appliquée mais qui est complètement transparente pour nous, pour qu'au final ce soit un string qui soit retourné et pas un int , comme pour la méthode Read().

    Je te remercie beaucoup de, tes réponses.

    Une fois ta dernière réponse reçue, je considèrerai que le sujet est résolu.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  16. #16
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Pour ce qui est des méthodes ReadLine() et ReadtoEnd() de la la classe StreamReader, elles retournent directement un String.
    Normalement, la lecture s'applique à des données binaires; peut-on en déduire qu'il y a eu une conversion en string(ou en char plusieurs fois) qui s'est appliquée mais qui est complètement transparente pour nous, pour qu'au final ce soit un string qui soit retourné et pas un int , comme pour la méthode Read().
    Oui, c'est ça

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut contenu d'un objet de type fileStream
    Bonjour,

    Je considère que le sujet est résolu.

    Merci encore beaucoup de toute votre aide et de tout le temps que vous avez bien voulu consacrer à me répondre.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  18. #18
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Je considère que le sujet est résolu.
    Alors indique le avec le bouton en bas de la page

+ 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