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 :

Lecture au-delà de la fin de fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Animateur commercial
    Inscrit en
    Août 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Animateur commercial

    Informations forums :
    Inscription : Août 2011
    Messages : 47
    Par défaut Lecture au-delà de la fin de fichier
    Bonjour

    J'ai un petit soucis avec un petit programme que je suis en train de créer. Quand il arrive à la fin du fichier que je suis en train de lire avec Blockread, il me met toujours cette erreur :

    Exception 'first chance' à $75ACC41F. Classe d'exception EInOutError avec un message 'Lecture au-delà de la fin de fichier'. Processus Project1.exe (2540).

    Or pour justement que le programme arrete de lire le fichier j'utilise la commande Eof ou alors j'ai testé avec Filepos(f) = Filesize(f).

    Quand je démarre avec while not Eof(F) do, j'ai plus que des paquets de 128 en lecture.

    Si quelqu'un pouvait éclairer ma lanterne ?

    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
    var
      i, data                     : Integer;
      test                        : string;
      F                           : File;
      s                           : AnsiString;
     
    begin
      openDialog1.InitialDir := GetCurrentDir;
      if openDialog1.Execute then
      begin
        AssignFile(F,openDialog1.FileName);
        Reset(F, 1);
        Seek(F, 0);
        //Lecture du titre
        BlockRead(f, data, 4);
        //showmessage (inttostr(data));
        SetLength(s, data);
        BlockRead(f, s[1], data);
        Edit1.Text := s;
        //Lecture description
        BlockRead(f, data, 4);
        SetLength(s, data);
        BlockRead(f, s[1], data);
        Memo1.Text := s;
        //Nombre de Wad dans le fichier
        BlockRead(f, data, SizeOf(data));
        //showmessage (inttostr(data));
        //Lecture des données
        SetLength(s, 128);
        i :=0;
        while not Eof(F) do
        begin
          if filepos(F)=filesize(F) then exit
          //if Eof(F) = true then exit
          else
          begin
            BlockRead(f, s[1], 128);
            s:=stringreplace(extractfilename(s),ExtractFileExt(s),'',[]);
            ListBox_Recap.Items.Add(s);
            //Juste là pour tester le nb de boucle
            inc (i, 1);
            showmessage (inttostr(i));
          end;
        end;
        Closefile(f);
      end;
      openDialog1.Free;
    end;

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    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 104
    Par défaut
    Tu pourras exploiter "Nombre de Wad" !
    Si un Wad est toujours de 128
    Avant même de lire, tu pourrais vérifier que la taille du fichier est correcte
    Donc la somme de
    SizeOf(Integer) + Longueur_titre + SizeOf(Integer) + Longueur_description + SizeOf(Integer) + (128 * Nombre_de_Wad);

    Tu as peut-être un footer après les Wad

    récupère le nombre d'octet lu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var
      ResultCount: integer;
    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
     
    while not Eof(F) do
    begin
      BlockRead(f, s[1], 128, ResultCount);
      if ResultCount = 128 then
      begin
        s:=stringreplace(extractfilename(s),ExtractFileExt(s),'',[]);
        ListBox_Recap.Items.Add(s);
        //Juste là pour tester le nb de boucle
        inc (i, 1);
        showmessage (inttostr(i));
      end
      else
        showmessage (Copy(s, 1, ResultCount)); // Contenu du footer, si binaire, il ne sera pas visible en message
    end;
    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

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

Discussions similaires

  1. Tentative de lecture au-delà de la fin du flux
    Par GwenZephyr dans le forum C#
    Réponses: 1
    Dernier message: 14/06/2010, 15h49
  2. Probleme de lecture fin de ligne/fin de fichier
    Par KiraX10A dans le forum Débuter
    Réponses: 4
    Dernier message: 15/10/2009, 13h31
  3. istream : lecture de fin de fichier
    Par Ange_blond dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/04/2009, 10h09
  4. Lecture de fichier binaire et gestion de fin de fichier
    Par habasque dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 02/05/2007, 17h06
  5. Problème de lecture de fin de fichier (eof(fichier))
    Par jailbomba dans le forum Pascal
    Réponses: 2
    Dernier message: 21/02/2007, 16h50

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