Problem TMemoryStream ( envoi fichier par socket )

cs_bazbazus Messages postés 120 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 27 août 2015 - 7 avril 2009 à 04:25
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 9 avril 2009 à 16:08
salut a tous je suis entrain de creer un explorateur online . quon j'essai de telecharger un fichier de petit taille (300) mo normal pas de problem mais quon j'envoi avec une grand taille (1500 mo) la c'est le problem erreur : Mémoire insuffisant lors de l'extension du flux mémoire

Code :
ms:= TMemoryStream.Create;
try
ms.LoadFromFile('MonGranFichier.exe');
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
except
ms.Free;
end;

Aide Moi S.v.p

5 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 avril 2009 à 13:09
utilise un TFileStream!

<hr size="2" width="100%" />
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
7 avril 2009 à 18:07
Petite taille = 300 Mo ! Ben dis donc tu n'y vas pas de main morte ! oO"
Sinon TFileStream a été fait pour les fichiers, il descend de TStream (comme TMemoryStream), donc utilise ce qui est fait pour ça !

Cordialement, Bacterius !
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 avril 2009 à 19:06
var
  FS : TFileStream;
begin
  FS := TFileStream.Create('MonGranFichier.exe', fmOpenRead);
  try
    FS.Position := 0;
    Socket.SendText(IntToStr(FS.Size) + #0);

    Socket.SendStream(FS);
  finally
    FS.Free;
  end;
end;

<hr size="2" width="100%" />
0
cs_bazbazus Messages postés 120 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 27 août 2015
9 avril 2009 à 02:14
salut a tous j'ai essai avec le TfileStream oui il envoi des fichier grand taille (1.8 go lol) mais le problème est dans la réception . le fichier s'arrêter de télécharger regarder :

  private
    Reciving: boolean;
    DataSize: integer;
    Data: TMemoryStream;

ClientRead :

  if not Reciving then
  begin
    SetLength(sl, StrLen(PChar(s))+1);
    StrLCopy(@sl[1], PChar(s), Length(sl)-1);
    DataSize:= StrToInt(sl);
    Data:= TMemoryStream.Create;
    Delete(s, 1, Length(sl));
    Reciving:= true;
   end;
   try
    Data.Write(s[1], length(s));
    if Data.Size = DataSize then
    begin
      Data.Position:= 0;
           data.SaveToFile('Mon fichier.exe');
      Data.Free;
      Reciving:= false;
    end;
  except
    Data.Free;
  end;

comment puis fair la réception avec un Tfilestream ? merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 avril 2009 à 16:08
[HS]

On dit "Receiving" en anglais :)

/HS

Cordialement, Bacterius !
0
Rejoignez-nous