Announcement

Collapse
No announcement yet.

Zugriffsfehler - wieso?

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

  • Zugriffsfehler - wieso?

    Hallo,<p>

    ich versuche mit folgender Funktion zwei Dateien zu vergleichen:<p>
    <pre>
    <b>function</b> FilesEqual(<b>const</b> Filename1, Filename2: <b>string)</b>: boolean;
    <b>var</b>
    fs1, fs2: TFileStream;
    buffer1, buffer2: pointer;
    buffersize: integer;
    IsEqual: boolean;
    ReadSize: integer;
    <b>begin</b>
    Result := false;
    buffersize := 100;
    GetMem(buffer1, BufferSize);
    GetMem(buffer2, BufferSize);
    <b>try</b>
    fs1 := TFileStream.Create(filename1, fmOpenRead);
    <b>try</b>
    fs2 := TFileStream.Create(filename, fmOpenRead);
    <b>try</b>
    IsEqual := true;
    <b>repeat</b>
    ReadSize := fs1.Read(buffer1, BufferSize);
    <b>* Hier passiert's... *</b>
    ReadSize := fs2.Read(buffer2, BufferSize);
    <b>if</b> not CompareMem(buffer1, buffer2, ReadSize) <b>then</b>
    IsEqual := false;
    <b>until</b>(not IsEqual) or (ReadSize < BufferSize);
    <b>finally</b>
    fs2.free;
    <b>end</b>;
    <b>finally</b>
    fs1.Free;
    <b>end</b>;
    <b>finally</b>
    FreeMem(buffer1, BufferSize);
    FreeMem(buffer2, BufferSize);
    <b>end</b>;
    Result := IsEqual;
    <b>end</b>;
    </pre><p>
    Dabei wird an der markierten Stelle (*) immer ein Zugriffsfehler erzeugt, d.h. die erste Zuweisung an Readsize scheint korrekt zu funktionieren, aber egal was dann kommt, die nächste Anweisung erzeugt die Zugriffsverletung - wieso? (Ich weiß, daß die doppelte Zuweisung an readsize überflüssig sein müßte, hab's nur für meine Übersicht mit reingepackt).<br>
    Kann mir da irgendjemand sagen, was da falsch läuft, bitte?
    <p>
    Vielen Dank und viele Grüße<p>
    Sascha

  • #2
    Hallo,<br>
    versuch mal ReadSize := fs1.Read(buffer1^, BufferSize)<br>
    <br>
    Gruß<br>
    Harr

    Comment

    Working...
    X