AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Blockread oder Tfilestream was nu ???

Ein Thema von richard_boderich · begonnen am 28. Jun 2004 · letzter Beitrag vom 29. Jun 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

Blockread oder Tfilestream was nu ???

  Alt 28. Jun 2004, 21:37
hallo leute, habe mal folgende frage


ich progge grad an einem diskeditor herum.
habe ihm mit array's , blockread und stringgrid realisiert.
klappt auch, aber der ganze syncro zwischen darstellung,
array und blockwrite ist ganz schoen lästig, zudem stelle ich
immer nur eine begrezte anzahl von bytes auf dem bildschirm dar, sodas
im stringgrid nich gescrollt werden muss oder kann, eine tastendruck zeigt dann die
naechste seite an. ich hätte es aber gern so, das ich einen scrollbalken habe mit
dem ich die datei im grid von anfang bis ende mit scrollen anschauen kann

hier meine fragen

1. worin liegt der unterschied oder vorteil zwischen blockread und tfilestream ? bzw. ihrer einsatzgebiete

2. kann ich ein stringgrid so mit tfilestream verketten, das er die ganze datei, sagen wir
mal 700 mb mit dem grid verknüpft, und bei betaetigung der scrollbalkens, automatisch die
position in der datei,anspringt, die daten lädt und im grid darstellt
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#2

Re: Blockread oder Tfilestream was nu ???

  Alt 28. Jun 2004, 22:35
Also zu 1.:

Ich glaube bei TFileStream ist das so, dass da die ganze Datei in den Stream geladen wird und bei BlockRead eben nur Blockweise, bin mir aber nicht ganz sicher
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Blockread oder Tfilestream was nu ???

  Alt 28. Jun 2004, 23:43
Moin Richard,

intern greifen beide Varianten auf die gleichen API Funktionen zu.
Die BlockRead Version ist noch ein Überbleibsel aus der Pascal Zeit, und man muss sich, z.B., um IOResult selber kümmern.
TFileStream ist die "modernere" Kapselung der API im Umgang mit Dateien.

Schau Dir an, was Dir am Besten liegt.

Vielleicht schaust Du Dir auch mal MemoryMappedFiles an. (Hier im Forum suchenMMF)

Bei 700MB müsstest Du die Daten sowieso nach und nach einlesen, da alles andere zu lange dauern würde.
Du müsstest bei jedem Tastendruck (z.B. Bild ab) mitberechnen, welchen Teil der Datei Du laden musst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#4

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 00:10
hallo christian,

also das mmf torturial hab ich nich gefunden,
aber ich hab mir was zum mmf im forum angeschaut, da graust mir's vor

handle's, pointer's, api' exeption's abfragen ! eigentlich bin
ich alter pascal hase, aber ist das neue schneller oder nur
eine andere syntax ??? und wie ist das zum beispiel, wenn
ich in einem filestream sagen wir mal byte 500 in der datei
aendern will, muss ich da mit irgentwelchen memory pointern
rummachen, die dann die bytes direkt im hauptspeicher aendern, und
dann denn stream zurueckschreiben oder wie geht der technische vorgang ab ???
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 00:14
Moin Richard,

Du kannst einfach mit Hilfe der Eigenschaft Position (Position = 0 => 1. Byte der Datei) den Anfang des zu ändernden Bereiches anwählen, und dann mit der Methode Write ab dieser Stelle schreiben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#6

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 07:18
hallo Christian,


ja, ja das ist mir schon klar, aber wenn ich das richtig seh, wird der komplette datenstream, in den
hauptspeicher geschrieben, und wie will ich ihn dort veraendern, um ihn dann schreiben zu lassen,
doch nicht etwa mit dem anspringen und aendern absoluter speicheradressen oder ?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 09:02
Moin!

Wieso sollte ein TFileStream den kompletten Dateiinhalt in den Speicher laden? Völliger Müll - er öffnet die Datei, er liest die Anzahl von Bytes die du ihm sagst beim Lesen an die Stelle X, die du ihm sagst beim Lesen, und das wars. Die liest er dann direkt aus der Datei - er puffert nix zwischen - das musst du machen.

Grundsätzlich sind aber BlockRead/TFileStream das gleiche, da sie auf den gleichen WinAPI Funktionen beruhen. Vorteil von TFileStream ist aber hingegen, dass dieser grössere Dateien verarbeiten kann, da bei der Definition von den alten Pascal Routinen noch der Variablentyp für die Position innerhalb der Datei zu klein war. Ab Delphi 6 haben die TStream Derivate sogar schon einen Int64 für die Dateigrösse und Filezeigerposition bekommen.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 10:01
hallo muetze


ja an welche stellen x den, and eine stelle im haupspeicher, oder an eine stelle in ein vorher definierten
array, oder in eine bestimmte variable oder ein memoryhandle, verstehst du, mein problem is, das ich nich weis, wie ich an die
eigelesenen daten rankomme um sie bearbeiten oder veraendern zu koennen. bei blockread mach ich das mit einen
array, aber wie gehst bei tfilestream ????
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 11:17
Na an stelle X in der datei (X=byte vom anfang der datei).

in etwa so:
Delphi-Quellcode:
var buffer:array[0..1023] od byte;
..
var fileStream : TFileStream;
begin
  fileStream := TFileStream.Create(fileName, fmOpenCreate oder so);
  try
    fileStream.position := X;
    fileStream.readBuffer(buffer[0],sizeOf(buffer));
    // buffer ändern
    buffer[42] := 42;
    // zurück damit
    fileStream.position := X;
    fileStream.writeBuffer(buffer[0],sizeOf(buffer));
  finally
    fileStream.free;
  end;
oder spricht da was gegen?
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Blockread oder Tfilestream was nu ???

  Alt 29. Jun 2004, 11:58
Moin!

Die Stelle "X" kannst du doch selber festlegen. Du kannst ihm doch einfach eine Integervariable geben und 4 Bytes einlesen, dann hast du die 4 Bytes aus der Datei an Stelle X im Speicher, wobei X die Position des Integers ist. Genausogut kannst du einen Buffer verwenden wie maximov das gezeigt hat. Bei dir währe es doch das beste, wenn du dir einen Buffer anlegst nach dem Vorbild von maximov welcher so gross wie der darstellbare Ausschnitt in deiner HexView ist. Dann brauchst du beim Scrollen einfach immer nur zu der FilePosition gehen und die Grösse des Buffers einzulesen. Darstellen brauchst du immer nur den Inhalt des Buffers. Und im Speicher hast du dann auch immer nur den Buffer...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:55 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