![]() |
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:
end;
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 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 |
Re: Filestream Teilen und Zeichen vorranstellen
|
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"
|
Re: Filestream Teilen und Zeichen vorranstellen
Das geht so:
Delphi-Quellcode:
Ungetestet, da Delphi nicht offen
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; |
Re: Filestream Teilen und Zeichen vorranstellen
so das funktioniert soweit super blos jetzt hab ich doch beim schreiben nen Problem...
Delphi-Quellcode:
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?
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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