Announcement

Collapse
No announcement yet.

EInOutError bei blockread

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EInOutError bei blockread

    Hallo zusammen,
    mein Problem ist dieser Code, der mir immer wieder einen E/A-Fehler 87 beschert:

    <PRE>procedure TForm1.Button1Click(Sender: TObject);
    var fts: string;
    datei: file;
    buf: array of byte;
    read: integer;
    begin
    OpenDialog1.Execute;
    if OpenDialog1.Filename <> '' then begin
    fts := OpenDialog1.Filename;
    try
    assignfile(datei, fts);
    reset(datei, 1);
    SetLength(buf, FileSize(Datei));
    blockread(datei, buf, filesize(datei), read);
    finally
    CloseFile(datei);
    end;
    end;
    end;
    </PRE>

    Vielen Dank

  • #2
    Änder mal die Zeile mit dem BlockRead in
    <br><code> BlockRead(datei, buf[0], Length(buf), read);
    </code></br>
    Sonst überschreibst du nämlich nicht den Inhalt des dynamischen Arrays, sondern den Zeiger darauf, den der Delphi-Compiler intern für dich verwaltet. Das resultiert bei mir zwar in ner Zugriffsverletzung und nicht einem E/A-Fehler, aber Versuch macht bekanntlich kluch. :-)
    <br>Ciao, Uli

    Comment


    • #3
      "if OpenDialog.Execute then" ist besser. Das faengt das Abbrechen des Open dialogs ab

      Comment


      • #4
        fts ist auch zu nichts nuetze. Gleich OpenDialog.FileName benutzen

        Comment


        • #5
          Stimmt, fts deshalbt, weil die Prozedur die ich gepostet habe sich auf den Fehler beschränkt. D.h. das eingentliche Programm von mir arbeitet mit fts.
          Daher hab ich das hier übernommen.

          MfG
          Jen

          Comment


          • #6
            Hallo,
            Danke für den Tipp. Bei mir klappt's jetzt. Ich benutze statt Length(buf) zwar sizeof(datei), glauube aber, dass ersteres bei mir auch funktioniert hat.
            MfG
            Jen

            Comment

            Working...
            X