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 :

lecture d'un flux Jusqu'à un offset déterminé


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut lecture d'un flux Jusqu'à un offset déterminé
    bonjour,

    Je veux lire un flux à partir d'un fichier texte, avec mon Streamreader, j'ai du mal a lire le fichier du début Jusqu'à une position bien déterminé. j'ai tenté d'éssayer avec les propirétés et méthodes corespondantes, mais ocuen n'est satisafaisante. je veux eviter le faite de lire le fichier par des tableaux de char ou de int, pour prendre en charge les grands flux.

    Y'a t'il un moyen pour procéder ?

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Pourquoi pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int i = 0;
    int offset;
    StreamReader stream;
    char c;
     
    while(i<offset && !stream.EndOfStream) {
       c = (char)stream.Read();
       i++;
    }

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Par défaut
    Essais d'ouvrir le fichier avec un objet Stream, positionner avec Stream.Seek et en suite passer l'objet Stream à un StreamReader pour la lecture/écriture...
    J'ai pas testé!

    [EDIT]
    Je crois que j'ai pas bien lu le post, donc, voici une autre proposition pour lire le fichier du début jusqu'à un offset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                int start = 0;
                int offset = 1024;
                StreamReader sr = new StreamReader(@"fichier.ext");
                char[] chars = new char[offset - start];
                sr.Read(chars, start, offset);
                string s = new string(chars);
                sr.Close();

  4. #4
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    Merci les gas pour les réponses. Bobbledople ta oslotution pourra bien faire l'affaire, mais je veux éviter de lire le flux je veux simplemet le récuperer à partir d'un interval donné. comme c'est le cas pour le basStream.position ou il récupere le flux a partir de la position jsuka la fin du flux.

    C'est de meme reeda, je veux esquiver la partie ou j'ai a reecrire le flux. c'est analogiquement semblable a BaseStream.Position ou en recupere le flux de Position juska la fin. Je me demande si ya un moeyen de traiter ca sans consommer le flux ??

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    pas d'idée sur ca ??

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Et tu voudrais le stocker dans quoi? En fait tu veux lire le flux sans faire avancer le curseur c'est ca?

    Tu peux toujour consommer le flux et replacer le curseur avec Stream.Position
    Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FileStream stream = File.OpenRead(path);
    int pos = stream.Position;
    byte[] array = new byte[count]; // count est le nombre de caractere à lire
    stream.Read(array, offset, count)
    stream.Position = pos;

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    Bjr,

    De meme, je veux eviter d'utiliser un tableau de bite pour eviter de parcourir tout le flux,et cela dans le soucis de pourvoir traiter des grands flux.

    Aparement, Microsoft ne propose pas de solution évoluée pour récuperer un flux à partir d'un intervalle donné.

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Mais tu veux en faire quoi de ces flux? tu veux les stocké qql part? les lire byte par byte? Je ne comprends pas bien ce que tu essaies de faire avec ces flux

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    exactement je vx les stocker

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Mais tu veux les stocker dans quoi? Comment veux-tu les stocker quelque part sans passer par des bytes ou des tableaux de bytes?

  11. #11
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Xx_raaY Voir le message
    De meme, je veux eviter d'utiliser un tableau de bite pour eviter de parcourir tout le flux,et cela dans le soucis de pourvoir traiter des grands flux.
    Si tu peux gérer de grands flux il faut passer par un buffer (tableau de bits) et écrire dans le buffer (en lisant la source) puis écrire les données du buffer vers la destination. On recommence l'opération jusqu'à avoir tout traité.

    Citation Envoyé par Xx_raaY Voir le message
    Aparement, Microsoft ne propose pas de solution évoluée pour récuperer un flux à partir d'un intervalle donné.
    Il y a tout ce qu'il faut pour manipuler les flux. Après il faut juste implémenter la logique dont on a besoin.

    Exemple avec une copie de fichier par blocs.
    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
    byte[] buffer = new byte[1024];
     
    using (Stream reader = new FileStream("MonFichier.txt", FileMode.Open, FileAccess.Read, FileShare.None))
    {
        using (Stream writer = new FileStream(@"Copie de MonFichier.txt", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            int dataRead = 0;
            do
            {
                dataRead = reader.Read(buffer, 0, buffer.Length);
                writer.Write(buffer, 0, dataRead);
            }
            while (dataRead == buffer.Length);
        }
    }
    Après si besoin on peut tester la position pour arrêter la copie si on ne veut copier que les X premiers octets.

    Sinon un conseil, évite les tableaux de bite. Les tableaux de bits c'est mieux

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Sinon un conseil, évite les tableaux de bite. Les tableaux de bits c'est mieux
    Haha

    Et je suis du même avis que StormimOn, je ne vois pas d'autre solution pour traiter un flux...

  13. #13
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    Si cé le seul moyen .. C'est bn .. je file a implenter la solution .. Merci les gas en tt cas. Je passe la discussion en résolu

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

Discussions similaires

  1. Treeview: déployer jusqu'à un niveau déterminé
    Par tAKAmAkA dans le forum Access
    Réponses: 5
    Dernier message: 04/03/2007, 15h03
  2. [RSS] Lecture d'un flux
    Par jacquesprogram dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/10/2006, 10h13
  3. Lecture d'un flux RSS en C
    Par geexskill dans le forum Réseau
    Réponses: 4
    Dernier message: 28/08/2006, 13h58
  4. [FLASH MX] Lecture d'un flux XML
    Par oxa dans le forum Flash
    Réponses: 2
    Dernier message: 02/06/2006, 12h33
  5. [Réseau] détecter la fin de lecture dans un flux entrant
    Par al85 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 30/03/2005, 21h06

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