Hallo,
kann man mit TFileStream unter Delphi2006 auch Dateien die größer als 2GB sind öffnen
und bearbeiten?
Welches OS ist braucht man da min. Nehme an ab Win2000 mit NTFS.
Mit welcher Methode würdet Ihr den in so großen Files nach
bestimmten Inhalten (von Strings) durchsuchen, was auch eine gute Geschwindigkeit hat.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var filDatei: TFileStream; byteBuffer: Byte; begin filDatei := TFileStream.Create('dieDatei.ext', fmOpenWrite); filDatei.Position := 33; byteBuffer := 122; filDatei.WriteBufffer(byteBuffer, 1); filDatei.Free; end; |
beim Dateien durchsuchen hab ich folgendes gefunden, nur kann man da auch
nach dem Wert 00h suchen?
zB: beim SearchWord, wenn man myfile.exe eingibt das er dann
nach folgenden sucht: 'm' + 00h + 'y' + 00h + 'f' + 00h ....
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| function FindInFile(const FileName : string; SearchWord : string; MatchCase : Boolean) : Integer; var fs : TFileStream; Buffer : array [1..10000] of Char; Size : Integer; idx : Integer; i : Integer; begin Result := -1; idx := 1; if not MatchCase then SearchWord := UpperCase(SearchWord); fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone); try Repeat Application.ProcessMessages; Size := (Fs.Size - Fs.Position); if Size > 10000 then Size := 10000; Fs.ReadBuffer(Buffer, Size); if not MatchCase then begin for i := 1 to Size do Buffer[i] := Uppercase(Buffer)[i]; end; for i := 1 to Size do begin if (Buffer[i] = SearchWord[idx]) then Inc(idx) else idx := 1; if (idx = Length(SearchWord)) then begin Result := (fs.Position - Size) + i - idx + 1; Exit; end; end; until fs.Position >= fs.Size; finally fs.Free; end; end; |