Einzelnen Beitrag anzeigen

Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#1

Dateien mit Indy versenden, Problem mit großen Dateien

  Alt 4. Nov 2015, 09:33
Hi Leute,

ich habe mir ein kleines Tool geschrieben um Dateien übers Internet auszutauschen.
Das funktioniert soweit auch erstmal bis auf das Problem, dass bei "großen" Dateien (z.B. bei knapp 400 MB)
die Meldung kommt: "Zu wenig Arbeitsspeicher".

Kompiliere ich die Anwendung als 64-bit funktioniert es ohne Probleme.
Zur Info, das System hat 16 GB RAM.

Kann mir jemand sagen, wo ich den Fehler mache?
Bei wirklich großen Dateien hätte ich es ja verstanden aber schon bei 400 MB?


Vielen Dank schonmal!



Hier mal der Quellcode:

CLIENT
Delphi-Quellcode:
procedure TForm1.SendFile(aFileName: String);
var
  fs: TFileStream;
begin
  with IdTCPClient do
  begin
    fs := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyWrite);
    try
      // Dateiname übertragen
      IOHandler.WriteLn('FT_FILENAME:' + ExtractFileName(aFileName));
      IOHandler.WriteBufferOpen;
      try
        // Datei übertragen
        IOHandler.Write(fs, 0, True);
        IOHandler.WriteBufferClose;
      except
        IOHandler.WriteBufferCancel;
        raise;
      end;
    finally
      fs.Free;
    end;
  end;
end;

SERVER
Delphi-Quellcode:
procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  fs: TFileStream;
  CommandString: String;
begin
  AContext.Connection.IOHandler.CheckForDataOnSource(10);
  if not AContext.Connection.IOHandler.InputBufferIsEmpty then
  begin
    // Befehl empfangen
    CommandString := AContext.Connection.IOHandler.ReadLn;

    if CommandString.StartsWith('FT_FILENAME:') then
    begin
      // Dateiname auslesen
      CommandString := Copy(CommandString, 13, CommandString.Length - 12);
      fs := TFileStream.Create('D:\TEST\' + CommandString,
        fmCreate or fmShareExclusive);
      with AContext.Connection do
        try
          // Datei empfangen
          IOHandler.ReadStream(fs, -1, False);
        finally
          fs.Free;
        end;
    end;
  end;
end;
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat