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

Langage Delphi Discussion :

FileWrite, FileRead


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut FileWrite, FileRead
    j'arrive pas a utilisé c fonction :
    voilas mon code :
    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
    procedure TForm1.SauvegardeInfoDossier();
    var
       FileHandle: Integer;
       Indice: Integer;
       iBytesRead: Integer;
       StringLen: Integer;
       StringVal: String;
       Bmp: TBitMap;
    begin
       if iNbFichier < 1 then Exit;
     
       FileHandle := FileCreate('Albbrwse.abf');
       StringVal := 'Commentaire.';
       StringLen := Length(StringVal);
       iBytesRead := FileWrite(FileHandle, StringLen, SizeOf(StringLen));
       iBytesRead := FileWrite(FileHandle, StringVal, StringLen);
     
       iBytesRead := FileWrite(FileHandle, iNbFichier, SizeOf(iNbFichier));
       for Indice := 0 to sListeFichier.Count - 1 do
       begin
          StringVal := sListeFichier[Indice];
          StringLen := Length(StringVal);
          iBytesRead := FileWrite(FileHandle, StringLen, SizeOf(StringLen));
          iBytesRead := FileWrite(FileHandle, StringVal, StringLen);
     
    //      Bmp := ListeIcones[Indice];
    //      FileWrite(FileHandle, Bmp, SizeOf(Bmp));
       end;
       FileClose(FileHandle);
     
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffer: PChar;
      Indice, i: Integer;
      StringLen: Integer;
      StringVal: String;
    begin
        try
          iFileHandle := FileOpen('Albbrwse.abf', fmOpenRead);
          iFileLength := FileSeek(iFileHandle,0,2);
          FileSeek(iFileHandle,0,0);
     
          iBytesRead := FileRead(iFileHandle, StringLen, SizeOf(StringLen));
          Buffer := PChar(AllocMem(StringLen + 1));
          iBytesRead := FileRead(iFileHandle, Buffer, StringLen);
     
          iBytesRead := FileRead(iFileHandle, iNbFichier, SizeOf(iNbFichier));
          sListeFichier.Clear;
          for Indice := 0 to iNbFichier - 1 do
          begin
             iBytesRead := FileRead(iFileHandle, StringLen, SizeOf(StringLen));
             Buffer := PChar(AllocMem(StringLen + 1));
             iBytesRead := FileRead(iFileHandle, Buffer, StringLen);
             sListeFichier.Add(Buffer);
          end;
     
        finally
          FileClose(iFileHandle);
          FreeMem(Buffer);
        end;
    end;
    le fichier est bient créé mais lors de la lecture ca fonctionne pas : notament la variable "iFileHandle" change de valeur sur un FileRead ...
    d'ou gros pb...

    autre chose j'aimerais sauvegarder aussi plusieur image... savez vous comment faire ?

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Bug classique, tu ne sauvegarde pas le contenu de la chaine StringVal, mais son pointeur et les octets qui suivent. Change ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    iBytesRead := FileWrite(FileHandle, StringVal[0], StringLen);

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    ok merci

    voilas ce que j'ai changer (Pour l'ecriture):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iBytesRead := FileWrite(FileHandle, StringVal[1], StringLen);
    et (Pour la lecture):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iBytesRead := FileRead(iFileHandle, Buffer[0], StringLen);

    je redonne mon autre question :
    j'aimerais sauvegarder aussi plusieur image (Object TBitMap) dans le meme fichier... savez vous comment faire ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    J'utiliserai pour çà la fonction SaveToStream avec un TFileStream.
    Il faut juste que tu ajoutes avant les données de chaque fichier un entête avec des infos sur le fichier qui suit, pour savoir où commence le deuxième.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Bon voilà pour l’écriture et ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       for Indice := 0 to sListeFichier.Count - 1 do
       begin
          StringVal := sListeFichier[Indice];
          StringLen := Length(StringVal);
          iBytesRead := FileWrite(FileHandle, StringLen, SizeOf(StringLen));
          iBytesRead := FileWrite(FileHandle, StringVal[1], StringLen);
     
          Jpg.Assign(ListeIcones[Indice]);
          Jpg.SaveToStream(FileS);
       end;
    par contre pour la lecture seul la première image est charger correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          for Indice := 0 to iNbFichier - 1 do
          begin
             iBytesRead := FileRead(iFileHandle, StringLen, SizeOf(StringLen));
             Buffer := PChar(AllocMem(StringLen + 1));
             iBytesRead := FileRead(iFileHandle, Buffer[0], StringLen);
             if iBytesRead = -1 then Exit;
             sListeFichier.Add(Buffer);
     
             Jpg.LoadFromStream(FileS);
             ListeIcones[Indice].Width  := Round(Jpg.Width);
             ListeIcones[Indice].Height := Round(Jpg.Height);
             ListeIcones[Indice].Canvas.StretchDraw(ListeIcones[Indice].Canvas.ClipRect,Jpg);
       end;
    je pense que le curseur sur le fichier ne s’est pas déplacer après l’image

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Jpg.LoadFromStream(FileS);
    mais rien qui charge le TFileStream FileS ?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    désolé :
    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
    procedure TForm1.Button3Click(Sender: TObject);
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffer: PChar;
      Indice, i: Integer;
      StringLen: Integer;
      StringVal: String;
       Jpg :TJpegImage;
       FileS: TFileStream;
    begin
        try
          iFileHandle := FileOpen('Albbrwse.abf', fmOpenRead);
          FileS := TFileStream.Create(iFileHandle);
          Jpg := TJpegImage.Create;
     
          iFileLength := FileSeek(iFileHandle,0,2);
          FileSeek(iFileHandle,0,0);
     
          iBytesRead := FileRead(iFileHandle, StringLen, SizeOf(StringLen));
          Buffer := PChar(AllocMem(StringLen + 1));
          iBytesRead := FileRead(iFileHandle, Buffer[0], StringLen);
     
          iBytesRead := FileRead(iFileHandle, iNbFichier, SizeOf(iNbFichier));
          sListeFichier.Clear;
     
          for Indice := 0 to iNbFichier - 1 do 
          begin 
             iBytesRead := FileRead(iFileHandle, StringLen, SizeOf(StringLen)); 
             Buffer := PChar(AllocMem(StringLen + 1)); 
             iBytesRead := FileRead(iFileHandle, Buffer[0], StringLen); 
             if iBytesRead = -1 then Exit; 
             sListeFichier.Add(Buffer); 
     
             Jpg.LoadFromStream(FileS); 
             ListeIcones[Indice].Width  := Round(Jpg.Width); 
             ListeIcones[Indice].Height := Round(Jpg.Height); 
             ListeIcones[Indice].Canvas.StretchDraw(ListeIcones[Indice].Canvas.ClipRect,Jpg); 
       end; 
     
        finally
          Jpg.Free;
          FileClose(iFileHandle);
          FreeMem(Buffer);
        end;
    end;
    meme pricipe en lecture

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    bon j'ai trouver ...

    grace as FileSeek et pas mal de bidouille j'ai optenu le fonctionnement que je voulais :
    enregistrer dans un meme fichier des fichier jpg leur non d'autre valeur.

    pour l'ecriture
    j'ecrie un entier et je retient la valeur de FileSeek
    puis j'ecrie mon jpg avec file seek je calcul la taille prise par mon jpg
    tjs avec FileSeek je revient en arrière pour ecrire mon entier qui est la taille de mon jpg.

    et pour la lecture :
    dès que j'ai lu un jpg dans mon fichier je repositionne le curseur fichier a la fin du jpg

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

Discussions similaires

  1. [FileWriter] Définir un charset
    Par GLDavid dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/10/2005, 14h23
  2. [FileReader] Besoin de performance !
    Par El Saigneur dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 08/08/2005, 13h35
  3. [FileWriter] 'retour chariot' en notepad
    Par mikemikemike dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 29/03/2005, 11h01
  4. [FileWriter] écrire à la suite dans un fichier.
    Par LoLoSS dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/06/2004, 14h56
  5. [FileWriter] retour à la ligne
    Par LoLoSS dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/06/2004, 10h52

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