Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datei im Speicher zeilenweise lesen (https://www.delphipraxis.net/54819-datei-im-speicher-zeilenweise-lesen.html)

Luckie 12. Okt 2005 12:04

Re: Datei im Speicher zeilenweise lesen
 
Ich werde mir Flockes zweite Methode mal genauer angucken und dann entscheiden. Aber gerade ist "Geheime Botschaften" von Simon Singh per Post angekommen, das wird also nichts mehr mit dem Umsetzen heute. ;)

Luckie 12. Okt 2005 12:17

Re: Datei im Speicher zeilenweise lesen
 
So, Problem:
Delphi-Quellcode:
// Initialisierung
function InitLine(hFile: THandle; var FileBufStr: string): boolean;
var
  GotBytes: cardinal;
begin
  SetLength(FileBufStr, BUFSIZE);
  Result := ReadFile(hFile, @FileBufStr[1], BUFSIZE, GotBytes, nil);
  if Result then
    SetLength(FileBufStr, GotBytes)
  else
    FileBufStr := '';
end;
In der siebten zeile meint Delphi:
Zitat:

[Error] PasswordRecover.dpr(288): Constant object cannot be passed as var parameter
Aber das ist doch kein konstantes Obejkt? Ich verstehe nicht, was Delphi mir damit agen will. :gruebel:

Olli 12. Okt 2005 12:21

Re: Datei im Speicher zeilenweise lesen
 
Zitat:

Zitat von Luckie
In der siebten zeile meint Delphi:
Zitat:

[Error] PasswordRecover.dpr(288): Constant object cannot be passed as var parameter
Aber das ist doch kein konstantes Obejkt? Ich verstehe nicht, was Delphi mir damit agen will. :gruebel:

Ich glaube bei ReadFile mußt du den Puffer einmal dereferenzieren. Also zu PChar casten und dann dereferenzieren.

Sharky 12. Okt 2005 12:24

Re: Datei im Speicher zeilenweise lesen
 
Müsste es nicht gehen wenn Du anstelle @FileBufStr[1] "nur" FileBufStr[1] übergibst?

Flocke 12. Okt 2005 12:24

Re: Datei im Speicher zeilenweise lesen
 
Zitat:

Zitat von Sharky
Müsste es nicht gehen wenn Du anstelle @FileBufStr[1] "nur" FileBufStr[1] übergibst?

Richtig! :oops: 8)

... und noch'n Fehler gesehen:

Delphi-Quellcode:
if not ReadFile(hFile, FileBufStr[OldLen + 1], BUFSIZE, GotBytes, nil) then
Klammeraffe weg und (ganz wichtig) +1!

... und noch'n Nachtrag:

Wenn #13 drin vorkommt (CR), dann solltest du das rausfiltern.
(wär echt einfacher gewesen, einfach TextFile zu benutzen :stupid: )

Olli 12. Okt 2005 12:28

Re: Datei im Speicher zeilenweise lesen
 
Zitat:

Zitat von Sharky
Müsste es nicht gehen wenn Du anstelle @FileBufStr[1] "nur" FileBufStr[1] übergibst?

Korrekt. Kommt auf's Dereferenzieren hinaus, wobei man sich jetzt streiten kann, ob Dereferenzieren eleganter (weil eindeutiger) ist ;)

Wenn du einen Puffer als untypisierten Pointer hättest, würdest du es ja genauso machen: ptr^

Luckie 12. Okt 2005 12:37

Re: Datei im Speicher zeilenweise lesen
 
Zitat:

Zitat von Flocke
(wär echt einfacher gewesen, einfach TextFile zu benutzen :stupid: )

Ja habe ich jetzt auch. ;)

Wäre es anzuraten den SetTextBuf auf die Dateigröße zu setzen oder was sollte man da am besten nehmen?

himitsu 12. Okt 2005 12:55

Re: Datei im Speicher zeilenweise lesen
 
SetTextBuf auf Dateigröße?
könntest du ja versuchen ... ich gehe ja mal davon aus, dat deine Datein kleiner als 2 GB ist ^^

Aber da du ja schreiben/lesen möchtest, würde ich dann diesen Wert noch auf ein Vielfaches der Clustergröße aufrunden :)


Ich hab ja bei meinen Hashfunktionen (Dateien lesen) den Puffer auch auf ein vielfaches der Clustergröße gesetzt (allerding nur auf das maximal 32-fache, wenn ich mich nicht irre)

Luckie 12. Okt 2005 12:57

Re: Datei im Speicher zeilenweise lesen
 
Ich muss nur lesen.

himitsu 12. Okt 2005 13:00

Re: Datei im Speicher zeilenweise lesen
 
Na dann könnte es eventuell ja egal sein ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.
Seite 2 von 2     12   

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