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

Delphi Discussion :

Fichiers binaires et WideString


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut Fichiers binaires et WideString
    tous le monde.

    j'ai un probleme avec l'ecriture et la lecture d'un fichier binaire, je cherche à stoquer et à lire une chaine de caractère unicode depuis un fichier binaire, mais j'ai eu toujours l'erreure de perdre le dernier charactère, voici le code, j'espere que vous prenez un peut de temps pour le voir, et le corriger s'il est possible.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    const
      Fichier = 'C:\test.dat';
    var
      FFile: File;
     
    implementation
     
    {$R *.DFM}
    function OuvrirFichier(var F: File; NomFich: String): boolean;
    begin
      {$I-}
      AssignFile(F, NomFich);
      if FileExists(NomFich) then
        Reset(F, 1)
      else
        Rewrite(F, 1);
      Result := (IOResult = 0);
      if not Result then {$I+} exit;
      Seek(F, 0);
      Result := (IOResult = 0);
      {$I+}
    end;
    //------------------------------------------------------------------
    function FermeFichier(var F: File): boolean;
    begin
      {$I-}
      CloseFile(F);
      Result := (IOResult = 0);
      {$I+}
      if not Result then exit;
    end;
    //------------------------------------------------------------------
    function EcrireChaine(S: WideString): boolean;
    var
      Longu, nbOct: Integer;
    begin
      Result := false;
      if not OuvrirFichier(FFile, Fichier) then exit;
      {$I-}
      Seek(FFile, 0);
      Truncate(FFile);
      if IOResult < 0 then exit;
      Longu := Length(S);
      BlockWrite(FFile, Longu, SizeOf(Longu), nbOct);
      if (IOResult <> 0) or (SizeOf(Longu) <> nbOct) then exit;
      BlockWrite(FFile, S[1], Longu, nbOct);
      if (IOResult <> 0) or (Longu <> nbOct) then exit;
      {$I+}
      Result := FermeFichier(FFile);
    end;
    //------------------------------------------------------------------
    function LireChaine(var S: Widestring): boolean;
    var
      Longu,
      nbOct: Integer;
    begin
      Result := false;
      if not OuvrirFichier(FFile, Fichier) then exit;
      {$I-}
      Seek(FFile, 0);
      if IOResult <> 0 then exit;
      BlockRead(FFile, Longu, 4, nbOct); //j'ai aissaie de changè le 4 en 8
      if (IOResult <> 0) or (nbOct <> 4) then exit;
      SetLength(S, Longu);
      BlockRead(FFile, S[1], Longu, nbOct);
      if (IOResult <> 0) or (nbOct <> Longu) then exit;
      {$I+}
      Result := FermeFichier(FFile);
    end;
    et Merci.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    Essaye peut-être cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if FileExists(NomFich) then
        Reset(F, 2)
      else
        Rewrite(F, 2);
    N'oublie pas qu'un WideString c'est deux octets par Char, Longu * 2
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut [Rèsolu]
    Merci Mr ShaiLeTroll c'est rèsolu

    Si vous avez des liens pour mieux comprendre les fichiers binaires , faites moi part s'il vous plait. Merci.

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

Discussions similaires

  1. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29
  2. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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