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 :

Ouvrir un fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut Ouvrir un fichier
    Bonjour,

    En C++Builder, je lisais un fichier binaire de la manière suivante:

    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
     
        FILE *fp;
        long adresse=24;
     
        struct fiche {int num_gare;int adresse;};
        struct fiche tr;
     
        fp=fopen("garejac_point.bin","rb");
     
        fseek(fp, adresse, 0L);
        fread((char*)&tr,sizeof(struct fiche),1,fp);
     
        /* résultat du read*/
     
        fclose(fp);
    Pourriez-vous me dire où je peux trouver un exemple sur le web qui me permettrais de faire la même chose en c#.

    D'avance, merci.

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    un exemple de lecture / ecriture en binaire , si ça peut t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                // Ecriture
                BinaryWriter binaryWriter = new BinaryWriter(File.Open("C:\\tonfichier.bin",FileMode.Create));
                binaryWriter.Write("salut");
                binaryWriter.Write(13);
                binaryWriter.Write(13.37);
                binaryWriter.Close();
                // Lecture
                BinaryReader binaryReader = new BinaryReader(File.OpenRead("C:\\tonfichier.bin"));
                string str = binaryReader.ReadString();
                int num = binaryReader.ReadInt32();
                double dec = binaryReader.ReadDouble();
                binaryReader.Close();

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En C# super simple : tout ce dont tu as besoin pour faire cela se trouve dans la classe "FileStream" en ce qui concerne la lecture.
    Après, pour le lire direct dans une structure, il te faudra manipuler la sérialisation binaire.

    De tête un petit exemple :
    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
     
    ...
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    ...
     
    [Serializable]
    struct Fiche {public int num_gare;public int adresse;}
     
    ...
     
    Fiche fiche;
     
    using(FileStream fs = new FileStream("garejac_point.bin",FileMode.Open,FileAccess.Read, FileShare.Read))
    {
        BinaryFormatter formatter = new BinaryFormatter();
     
        fiche=(Fiche)formatter.Deserialize(fs);
    }
    Cela suppose que le fichier en question a été sérialisé avec la sérialisation .Net.

    Grâce au "using", le fichier est fermé à la fin même s'il y a une exception. D'ailleurs, n'hésites pas à entourer d'un "try/catch" avec les exception nécessaires à attraper.

    Doc sur FileStream ici et sur BinaryFormatter .

    [EDIT]
    La technique de pixelJuice est bien aussi surtout lorsqu'il s'agit de manipulation de petites données comme les tiennes.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut
    Merci Ph_GR,

    J'ai le message d'erreur suivant "Le flux d'entrée n'est pas un format binaire valide. Le contenu initial (en octets) est*: BD-03-00-00-46-42-0F-00-5C-2B-00-00-51-08-00-00-12 ...". Ce fichier a été créer avec C++Builder.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par adrien954 Voir le message
    Merci Ph_GR,

    J'ai le message d'erreur suivant "Le flux d'entrée n'est pas un format binaire valide. Le contenu initial (en octets) est*: BD-03-00-00-46-42-0F-00-5C-2B-00-00-51-08-00-00-12 ...". Ce fichier a été créer avec C++Builder.
    Comme je l'ai dit dans mon message, il faut que le flux ait été créé avec le même sérialiseur.NET sinon ça ne fonctionne pas.

    Cela dit, sachant que ton fichier contient 2 entiers à la suite, essaye plutôt la technique de Romain, elle devrait être plus fructueuse.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut
    oui, mais je voudrais pointer (seek) à un moment donné à un endroit bien précis.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Il existe aussi une méthode "Seek" dans la classe "FileStream". ça fait exactement ce que tu veux.

    Une fois que tu as fait ton "Seek" tu n'as plus qu'à ouvrir un BinaryReader sur ton FileStream et à faire les "ReadInt32" comme l'a montré Romain.

    Et n'hesites pas à potasser l'aide MSDN en ligne pour les classes "BinaryReader" et "FileStream".

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2004, 13h55
  2. ouvrir un fichier
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 10/01/2004, 23h04
  3. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

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