Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Filestream Teilen und Zeichen vorranstellen (https://www.delphipraxis.net/117358-filestream-teilen-und-zeichen-vorranstellen.html)

gandime 16. Jul 2008 15:30


Filestream Teilen und Zeichen vorranstellen
 
Hi,
ich möchte einen Filestream in kleine Stücke zerteilen, anschliesend eine Stringzeichenfolge an den anfang setzten und mit dem Clientsocket verschicken:

Delphi-Quellcode:
Client:

var
  Fstream:TFileStream;
  Buffer: array[0..4095] of Byte;
begin
  Fstream:=TFileStream.Create('D:\a.mp3', fmOpenRead or fmShareDenyWrite);
  Fstream.read(Buffer,sizeof(Buffer));
  // blos wie schreibe ich einen String an den anfang?
  cs.Socket.SendBuf(Buffer,sizeof(Buffer));
end;

Server:
procedure TForm1.ssRead(Sender: TObject; Socket: TCustomWinSocket);
var
  s_temp:AnsiString;
  i_size:integer;
begin
  i_size:=socket.ReceiveLength;
  SetLength(s_temp, i_Size);
  socket.ReceiveBuf(s_temp[1],i_size);// so lese ich das dann wieder aus
  // es wäre super wenn man die Stringfolge lesen könnte als wenn es ein string ist
end;

das zusammensetzten sollte ja nicht das Probelem sein das müsste ja mit Fstream.write sein!? oder gibt es da etwas spezielles zu beachten?

dieses sind natürlich nur Codeschnipsel das mit der Verbindung funktioniert alles einwandfrei!

mfg

gandime

marius0702 16. Jul 2008 16:31

Re: Filestream Teilen und Zeichen vorranstellen
 
Villeicht hilft dir das weiter:

http://www.delphi-treff.de/tipps/dat...isse/tipp/333/

gandime 16. Jul 2008 16:42

Re: Filestream Teilen und Zeichen vorranstellen
 
ne eher weniger das was da steht weiss ich ja schon alles wie das geht ich möchte ja ein paar Zeichen an den Anfang des geteilten stücken "hängen"

littleDave 16. Jul 2008 16:49

Re: Filestream Teilen und Zeichen vorranstellen
 
Das geht so:
Delphi-Quellcode:
var Buffer : array[0..4096] of char;
    PreFix : string; // das was du vor den daten haben willst
begin
  // Deine Daten
  PreFix := 'Hallo';
  // 'Hallo' in den ersten Teil schreiben
  Move(PreFix[1], Buffer[0], length(PreFix));
  // den restlichen Buffer mit den Daten aus TFileStream auslesen
  FStream.Read(Buffer[length(PreFix)], SizeOf(Buffer) - length(PreFix));
end;
Ungetestet, da Delphi nicht offen

gandime 17. Jul 2008 16:07

Re: Filestream Teilen und Zeichen vorranstellen
 
so das funktioniert soweit super blos jetzt hab ich doch beim schreiben nen Problem...
Delphi-Quellcode:
procedure sendbuf2server(s_com:ansistring; fstream:tfilestream);
var
  Buffer : array[0..4096] of char;
  s_text,s_size: ansistring;
  F:TFilestream;
  I: integer;
  ipos:integer;
begin
  repeat
    if fileexists('D:\a.jpg') then
    begin
      f:=TFileStream.Create('D:\a.jpg', fmShareDenyWrite);
    end
    else
    begin
      f:=TFileStream.Create('D:\a.jpg', fmCreate or fmShareDenyWrite);
    end;
    s_text:=inttostr(SizeOf(buffer))+'|'+s_com+':'+inttostr(FStream.Position)+':';
    Move(s_text[1],Buffer[0],length(s_text));
    f.Position:=FStream.Position;
    FStream.Read(Buffer[length(s_text)],SizeOf(Buffer)-length(s_text));
    s_text:='';
    for I := 0 to sizeof(buffer) - 1 do
    begin
      s_text:=s_text+buffer[i];
    end;
    s_size:=split_vor(s_text,'|',true);
    setlength(s_text,strtoint(s_size));
    s_text:=split_nach(s_text,':',true);
    s_text:=split_nach(s_text,':',true);
    s_text:=split_nach(s_text,':',true);
    f.Write(s_text[1],length(s_text));
    f.free;
  end;
end;
das ist mal wieder aus dem kontext gerissen^^ und zwar ist das Problem glaube das setzten der Position da meine Datei die f ausspuckt nur 4,00 kb groß is was mache ich falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz