![]() |
Negatives TFileStream.Seek mit soFromEnd unter Windows 98
Hallo,
ich stehe hier vor einem kleinen Rätsel. Ich öffne eine Datei über TFileStream und springe kurz vors Ende mit
Delphi-Quellcode:
Das funktioniert soweit, nur habe ich mein Programm nun mit Virtual PC mit Windows 98 getestet und dort spingt der Stream auf einmal vorwärts. Drehe ich das Vorzeichen um, so dreht sich auch die Richtung. Ist das nun ein Problem von Windows 98, von meinem Programm oder von Virtual PC?
Stream.Seek(-22, soFromEnd);
karlkoch |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Welche Delphi Version verwendest du ?
Bitte gleich auch in deinem User-Profil von Delphi-Praxis eintragen. Ab Delphi Version 6 unterstützt die TStream-Klasse auch Streams grösser als 2 GB, da nun das Property Position von Integer nach Int64 geändert wurde. Wie stellst du fest, dass du dich im Stream vorwärts bewegst ? Wahrscheinlich hast du dich nur selbst ausgetrickst. |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Ich verwende Turbo Delphi und das Problem tritt bei jeder Datei auf, egal wie groß. Ich vermute mal das es da ein Problem mit VirtualPC gibt, würde mir das aber gern bestätigen lassen. Wie gesagt ein Aufruf von Stream.Seek(-22, soFromEnd) bringt unter Win98 in VirtualPC 2007 eine Vorwärtsbewegung, ermittelt mit Pos := Stream.Position.
karlkoch |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Wenn's dich wirklich interessiert, dann könntest du hier ja den Sourcecode für ein kleines Testprogramm liefern.
Das Testprogramm gibt die Aussage "funktioniert" oder "funktioniert nicht". Ich könnte dir sagen, ob das Testprogramm prinzipiell korrekt ist und die Mitleser könnten es auch ihren System testen. |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
ich glaub kaum das es an virtual pc liegt, eher an win98. Ansonsten würde ja fast nichts laufen wenn vorzeichen in allen möglichen programmen einfach umgekehrt werden. dann würde wohl auch das bs selbst nicht richtig laufen. Ich tippe eher darauf das die verwendeten Api-Funktionen die Konstante damals noch nicht kannten oder eine andere bedeutung hatten.
|
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Ich kann den Fehler mit folgendem Beispielcode reproduzieren:
Delphi-Quellcode:
Wie zu erwarten gibt das Programm eine Position eins vor der Gesamtgröße zurück, was auch völlig normal ist. In VirtualPC mit Win98 springt er jedoch 1 hinter die Datei. Zum Testen einfach die 'Test.txt' mit einer eigenen Datei ersetzen, die mindestens 1 Byte groß ist.
procedure TForm1.FormCreate(Sender: TObject);
var Stream: TFileStream; begin Stream := TFileStream.Create('Test.txt', fmOpenRead or fmShareDenyWrite); try Stream.Seek(-1, soFromEnd); ShowMessage(Format('Größe: %d Position: %d', [Stream.Size, Stream.Position])); finally Stream.Free; end; end; karlkoch |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Hallo,
ich hoffe doch sehr, dass du WIN98SE verwendet hast. Um den Bug zu umgehen könntest du die Positionierung anders durchführen:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.FormCreate(Sender: TObject);
var Stream: TFileStream; begin Stream := TFileStream.Create('Test.txt', fmOpenRead or fmShareDenyWrite); try Stream.Position := Stream.Size - 1; ShowMessage(Format('Größe: %d Position: %d', [Stream.Size, Stream.Position])); finally Stream.Free; end; end; |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
folgendes steht im msdn zu SetFilePointer (was intern durch seek aufgerufen wird)
Zitat:
|
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Hallo Jens,
die VCL-Macher wussten das und repositionieren den Stream. Freundliche Grüße |
Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9
Ich verwende die erste Version von Win98 in der virtuellen Umgebung. Danke an marabu für einen möglichen Workaround. Aber konnte denn jemand diesen Fehler bestätigen, sodass sich rausfinden lässt obs nun an Win98 oder an VirtualPC liegt?
karlkoch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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