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 :

[Delphi 6] Problème avec FileRead


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut [Delphi 6] Problème avec FileRead
    Bonjour,

    Le code ci-dessous, donné comme exemple dans l'aide Delphi 6, plante sur la ligne [i]StringGrid1.Cells[1,i+1] := Buffer; avec un Access Violation. Je n'arrive pas à déterminer pourquoi. On dirait que la zone mémoire alouée n'est pas remplie au moment de l'exécution de FileRead. Si vous avez une idée...

    Pour les besoins du test il faut :

    1) Se créer un fichier texte contenant quelques mots
    2) un TForm
    3) Sur Form1, ajouter un bouton, un StringGrid et un composant TOpenDialog
    4) Ajouter le code qui suit sur l'évènement OnClick du Bouton

    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
    procedure TForm1.Button1Click(Sender: TObject);
     
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffer: PChar;
      i: Integer;
    begin
      if OpenDialog1.Execute then
      begin
        try
          iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
          iFileLength := FileSeek(iFileHandle,0,2);
          FileSeek(iFileHandle,0,0);
          Buffer := PChar(AllocMem(iFileLength + 1));
          iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
          FileClose(iFileHandle);
     
          for i := 0 to iBytesRead-1 do
          begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Cells[1,i+1] := Buffer[i];
            StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
          end;
        finally
          FreeMem(Buffer);
        end;
      end;
    end;
    Merci

    JJE

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Dans cette ligne tu lis le fichier dans le pointeur et non dans la zone allouée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  3. #3
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Merci Nono... génial !

    Je crois que j'aurais encore pu chercher longtemps !

    A+

    JJE

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/10/2005, 13h18
  2. [Delphi 2005] Problème avec JVCL
    Par jpminiscloux dans le forum EDI
    Réponses: 3
    Dernier message: 11/09/2005, 15h23
  3. [Delphi 6] Problèmes avec SendMessage
    Par KrusK dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 09/09/2005, 11h49
  4. [Delphi 2005] : Problème avec MessageDlg.....
    Par babyface dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2005, 12h07
  5. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11

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