AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Filestream Teilen und Zeichen vorranstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Filestream Teilen und Zeichen vorranstellen

Ein Thema von gandime · begonnen am 16. Jul 2008 · letzter Beitrag vom 17. Jul 2008
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

Filestream Teilen und Zeichen vorranstellen

  Alt 16. Jul 2008, 16:30
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
  Mit Zitat antworten Zitat
marius0702

Registriert seit: 1. Jan 2008
40 Beiträge
 
#2

Re: Filestream Teilen und Zeichen vorranstellen

  Alt 16. Jul 2008, 17:31
Villeicht hilft dir das weiter:

http://www.delphi-treff.de/tipps/dat...isse/tipp/333/
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: Filestream Teilen und Zeichen vorranstellen

  Alt 16. Jul 2008, 17:42
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"
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#4

Re: Filestream Teilen und Zeichen vorranstellen

  Alt 16. Jul 2008, 17:49
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
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: Filestream Teilen und Zeichen vorranstellen

  Alt 17. Jul 2008, 17:07
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?
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:50 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