AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateien mit Indy versenden, Problem mit großen Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien mit Indy versenden, Problem mit großen Dateien

Ein Thema von MuTzE.Y85 · begonnen am 4. Nov 2015 · letzter Beitrag vom 6. Nov 2015
 
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, 08: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
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz