AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Negatives TFileStream.Seek mit soFromEnd unter Windows 98
Thema durchsuchen
Ansicht
Themen-Optionen

Negatives TFileStream.Seek mit soFromEnd unter Windows 98

Ein Thema von karlkoch · begonnen am 19. Sep 2007 · letzter Beitrag vom 20. Sep 2007
Antwort Antwort
karlkoch

Registriert seit: 26. Feb 2006
Ort: Leipzig
30 Beiträge
 
Delphi 10.4 Sydney
 
#1

Negatives TFileStream.Seek mit soFromEnd unter Windows 98

  Alt 19. Sep 2007, 14:01
Hallo,

ich stehe hier vor einem kleinen Rätsel. Ich öffne eine Datei über TFileStream und springe kurz vors Ende mit
Stream.Seek(-22, soFromEnd); 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?

karlkoch
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 19. Sep 2007, 18:10
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.
Andreas
  Mit Zitat antworten Zitat
karlkoch

Registriert seit: 26. Feb 2006
Ort: Leipzig
30 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 19. Sep 2007, 23:38
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 10:20
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 10:57
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
karlkoch

Registriert seit: 26. Feb 2006
Ort: Leipzig
30 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 11:09
Ich kann den Fehler mit folgendem Beispielcode reproduzieren:

Delphi-Quellcode:
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;
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.

karlkoch
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 12:35
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:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 12:49
folgendes steht im msdn zu SetFilePointer (was intern durch seek aufgerufen wird)
Zitat:
You can use SetFilePointer to determine the length of a file. To do this, use FILE_END for dwMoveMethod and seek to location zero (0). The file offset returned is the length of the file. However, this practice can have unintended side effects, for example, failure to save the current file pointer so that the program can return to that location. It is best to use GetFileSize instead.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 12:56
Hallo Jens,

die VCL-Macher wussten das und repositionieren den Stream.

Freundliche Grüße
  Mit Zitat antworten Zitat
karlkoch

Registriert seit: 26. Feb 2006
Ort: Leipzig
30 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Negatives TFileStream.Seek mit soFromEnd unter Windows 9

  Alt 20. Sep 2007, 15:11
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
  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 14:57 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