![]() |
TFileStream, Buffer, kA einlesen / auslesen
Hi,
Ich bin jetzt seit einigen Stunden am suchen, allerdings hab ich leider noch nichts brauchbares gefunden, hoffe wer von euch kann mir weiterhelfen. (Auch nach 4 Jahren Delphi in der Schule haben wir sowas nicht gesehen...) Also das Problem ist dass ich kA hab wie ich eine Datei (keine .txt-Datei, sondern eine .exe, .doc oder was auch immer) in einen Buffer schreibe. Säter will ich diese Datei auch wieder herstellen. Zu Testzwecken wollte ich also probieren eine Datei damit zu Copieren. Allerdings funktionierts nicht. Global:
Delphi-Quellcode:
Einlesen:
var gFileSize: integer;
Delphi-Quellcode:
Auslesen:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; DateiFS: TFileStream; begin DateiFS := TFileStream.Create('C:\Delphi_Test.exe', fmOpenRead); gFileSize := DateiFS.Size try for i := 1 to gFileSize do begin //kA was hierhin kommt und ob das andere richtig ist? end; finally DateiFS.Free; end; end;
Delphi-Quellcode:
mfG Morbid
procedure TForm1.Button2Click(Sender: TObject);
var i: integer; DateiFS: TFileStream; begin DateiFS := TFileStream.Create('C:\Delphi_Test_Blup.exe', fmCreate); try for i := 1 to gFileSize do begin //kA was hierhin kommt und ob das andere richtig ist? end; finally DateiFS.Free; end; end; |
Re: TFileStream, Buffer, kA einlesen / auslesen
Wenn mich nicht alles täuscht, hat der Stream eine Methode Write-/ReadBuffer - die erwartet eine Adrssse und eine Länge und schreibt dann an die Adresse die Daten.
D.h. Du machst bspw. ein Array of Byte, setzt die Länge auf die des Filestreams und benutzt fs.readbuffer(@array[0], fs.length) oder so ähnlich ;) Danach ist der Dateiinhalt im Array. |
Re: TFileStream, Buffer, kA einlesen / auslesen
Ok, danke! ;)
Aber gibts da ne Möglichkeit kein Array zu verwenden, sondern ein String? Oder was würdest du mir empfehlen wenn ich es übers Netzwerk übertragen will, kA obs mit nem array auch so einfach geht? ;) mfG Cedric |
Re: TFileStream, Buffer, kA einlesen / auslesen
Klar, lies einfach per ReadBuffer den Inhalt vom Stream in eine String-Variable ein.
Zuerst solltest du natürlich die Länge des Strings per SetLength setzen und anschließend beim Lesen den 1 Index angeben - so mein ich das: DateiFS.ReadBuffer( StringVariable[1], <Länge_des_String> ) |
Re: TFileStream, Buffer, kA einlesen / auslesen
Ok, danke, hat super geklappt :)
Hab allerdings noch ne kleine Frage, will ich diese Datei jetzt Einlesen, über Socket senden, muss ich ja als erstes die gFileSize und den Sring (gUebergabe) übertragen. Dann wieder Auslesen? Müsste ja auch so mit dem SendText des Sockets funktionieren, verstehe den SendBuf oder SendStream nämlich nicht ganz... Global:
Delphi-Quellcode:
Einlesen:
var gUebergabe: string;
gFileSize: integer;
Delphi-Quellcode:
Auslesen:
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer; DateiFS: TFileStream; begin DateiFS := TFileStream.Create('C:\Delphi_Test.doc', fmOpenRead); gFileSize := DateiFS.Size; SetLength(gUebergabe,gFileSize); try DateiFS.ReadBuffer(gUebergabe[1], gFileSize); finally DateiFS.Free; end; end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var I: integer; DateiFS: TFileStream; begin DateiFS := TFileStream.Create('C:\Delphi_Test_Blup.doc', fmCreate); try DateiFS.WriteBuffer(gUebergabe[1], gFileSize); finally DateiFS.Free; end; end; |
Re: TFileStream, Buffer, kA einlesen / auslesen
Neue Frage = neuer Thread
Aber ein kleiner Tipp: Du solltest dir einen kleinen Header definieren, in der wichtigste Daten stehen, und die Daten (nicht Headerdaten) solltest du nur sequenziell in kleinen Paketen schicken (Meine Ansicht) MfG |
Re: TFileStream, Buffer, kA einlesen / auslesen
OK ;)
Ja danke ;) Hab mir schon vor einiger Zeit ein kleines Protokoll geschrieben dass die zu übertragen Daten in Blöcke aufteilt, einen Prefix anhängt und es sendet, ausserdem hab ich meinem letzten Block einen Suffix angehängt. Auf der anderen Seite werden Prefix und Suffix entfernt und neu zsgesetzt. Mal versuchen ob es bei diesem String (gUebergabe) auch funktioniert. ;) --> Aja, noch was zu diesem Thema, ist es normal well ich diesen String (gUebergabe) in ein Memo schreibe, es nur 5 Zeichen sind obwohl es eine .avi ist mit über 200MB? oder wo liegt das Problem bei:
Delphi-Quellcode:
mfGCedric
Memo1.Text := gUebergabe;
|
Re: TFileStream, Buffer, kA einlesen / auslesen
Zitat:
in einem Memo werden Texte angezeigt, also nur ein gewisser Teil aller Binärzeichen. -und die Musik und Filme sind in einer avi Datei sicherlich nicht als Text gespeichert. Grüße Klaus |
Re: TFileStream, Buffer, kA einlesen / auslesen
Ach so, danke ;)
Ja verstehe, gibts denn was Memo-ehnliches mit dem man es anzeigen kann (Unter Delphi 5)? Wo kommt bei meinem BSP. eigentlich
Delphi-Quellcode:
hin damit nicht alles hängt beim laden oder was muss man da sonst machen? ;)
Application.ProcessMessages
mfg Cedric |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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