AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TFileStream, Buffer, kA einlesen / auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream, Buffer, kA einlesen / auslesen

Ein Thema von Morbid · begonnen am 17. Jun 2009 · letzter Beitrag vom 17. Jun 2009
Antwort Antwort
Morbid

Registriert seit: 9. Jun 2009
8 Beiträge
 
#1

TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 19:45
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:
var gFileSize: integer; Einlesen:
Delphi-Quellcode:
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;
Auslesen:
Delphi-Quellcode:
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;
mfG Morbid
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 19:48
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.
  Mit Zitat antworten Zitat
Morbid

Registriert seit: 9. Jun 2009
8 Beiträge
 
#3

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 19:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 20:00
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> )
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Morbid

Registriert seit: 9. Jun 2009
8 Beiträge
 
#5

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 20:24
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:
var gUebergabe: string;
    gFileSize: integer;
Einlesen:
Delphi-Quellcode:
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;
Auslesen:
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;
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 20:28
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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Morbid

Registriert seit: 9. Jun 2009
8 Beiträge
 
#7

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 20:42
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:
Memo1.Text := gUebergabe; mfGCedric
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 20:56
Zitat von Morbid:

--> 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:
Memo1.Text := gUebergabe; mfGCedric
N'abend Cedric,

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
Klaus
  Mit Zitat antworten Zitat
Morbid

Registriert seit: 9. Jun 2009
8 Beiträge
 
#9

Re: TFileStream, Buffer, kA einlesen / auslesen

  Alt 17. Jun 2009, 23:15
Ach so, danke
Ja verstehe, gibts denn was Memo-ehnliches mit dem man es anzeigen kann (Unter Delphi 5)?

Wo kommt bei meinem BSP. eigentlichApplication.ProcessMessages hin damit nicht alles hängt beim laden oder was muss man da sonst machen?

mfg Cedric
  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 16:56 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