Announcement

Collapse
No announcement yet.

Dateien kopieren mit TFileStream

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

  • Dateien kopieren mit TFileStream

    Hallo zusammen.
    Ich möchte gern mit TFileStream Dateien kopieren. Allerdings ohne CopyFrom.
    Das heisst ich möchte die bytes in einen buffer einlesen, und danach aus dem buffer wieder rausschreiben in die datei, oder einen anderen buffer (z.b.: socket). Folgendes Programm funktioniert auch, allerdings mit der kleinen aber feinen einschränkung, dass z.b. bei einer textdatei das zweite zeichen immer falsch kopiert wird.

    var mystream1, mystream2: TFileStream;
    var puffer: byte;
    var puffersize: integer;

    mystream1:=TFileStream.create('C:\Test.txt', fmopenread or fmshareexclusive);
    mystream2:=TFileStream.create('D:\Test.txt', fmcreate or fmshareexclusive);
    puffersize:=mystream1.read(puffer, 9999999);
    mystream2.write(puffer, puffersize);
    mystream1.free;
    mystream2.free;

    Wäre echt dankbar wenn mir jemand sagen könnte warum das zweite Zeichen immer ein falsches ist.

    Danke

  • #2
    Dein Buffer ist mit 1 Byte viel zu klein. Das Du keine AV's bekommst ist ein Wunder.

    <pre>

    procedure CopyFrom(Dest, Source: TStream);
    const
    MaxSize = 1024 * 8; // sollte 2^x sein, und 8Kb sind ausreichend
    var
    Buffer: Pointer;
    Count,Bytes: Integer;
    begin
    Count := Source.Size - Source.Position;
    if Count > MaxSize then Bytes := Count else Bytes := MaxSize;
    GetMem(Buffer, Count);
    try
    while Count > 0 do
    begin
    Bytes := Count;
    if Bytes > MaxSize then Bytes := MaxSize;
    Bytes := Source.ReadBuffer(Buffer^, Bytes);
    Dest.WriteBuffer(Buffer^, Bytes);
    Dec(Count, Bytes);
    end;
    finally
    FreeMem(Buffer);
    end;
    end;

    <br>

    Wenn Du obigen Code mit TStream.CopyFrom() vergleichst siehst Du aber keinen Unterschied mehr, d.h. ob Du ein eigenes .CopyFrom() codest oder gleich TStream.CopyFrom() nutzt spielt keine Rolle mehr.

    Hage

    Comment

    Working...
    X