Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFilestream.Size zu groß unter Windows 7 (https://www.delphipraxis.net/156330-tfilestream-size-zu-gross-unter-windows-7-a.html)

arnold mueller 28. Nov 2010 13:11

Delphi-Version: XE

TFilestream.Size zu groß unter Windows 7
 
Hallo zusammen!

TFilestream.Size liefert unter Windows 7 nicht den gleichen Wert wie unter Windows XP.

Die Datei hat laut HxD-Editor 783 Bytes. Windows XP und auch Windows 7 zeigen unter den Dateieigenschaften 784 Bytes an. TFilestream.Size liefert unter XP 780 Bytes, unter Windows 7 784 Bytes.

Zu allem Überfluss liefert der folgende Code unter Windows 7 auch 780 Bytes:

Delphi-Quellcode:
    try
      iFileHandle := SysUtils.FileOpen(FileName, fmOpenRead);
      iFileLength := SysUtils.FileSeek(iFileHandle,0,2);
    finally
      FileClose(iFileHandle);
    end;
Was stimmt den nun? 783 Bytes scheinen plausibel da HxD 0x30F (783) anzeigt, wenn ich den Cursor auf das letzte Byte stelle. Mein Programm läuft aber seit Tag und Jahr problemlos unter Windows XP, also mit 780 Bytes. Irgendwelche Ideen?

-
arno

xaromz 28. Nov 2010 13:15

AW: TFilestream.Size zu groß unter Windows 7
 
Hallo,
Zitat:

Zitat von arnold mueller (Beitrag 1064619)
783 Bytes scheinen plausibel da HxD 0x30F (783) anzeigt, wenn ich den Cursor auf das letzte Byte stelle.

Dann sollte die Datei aber 784 Byte lang sein, denn das erste Byte hat ja die Position null. Das ist auch konsistent mit den Dateieigenschaften bzw. der Dateigröße unter Win7.

Gruß
xaromz

arnold mueller 28. Nov 2010 13:23

AW: TFilestream.Size zu groß unter Windows 7
 
Zitat:

Dann sollte die Datei aber 784 Byte lang sein, denn das erste Byte hat ja die Position null.
Stimmt!

Aber wie kommen dann die 780 Bytes zustande?

Klaus01 28. Nov 2010 13:48

AW: TFilestream.Size zu groß unter Windows 7
 
Hallo,

vielleicht spielt BOM (Byte Order Mark; 3Byte) eine Rolle?

..noch einen schönen ersten Advent

Klaus

alzaimar 28. Nov 2010 13:49

AW: TFilestream.Size zu groß unter Windows 7
 
Da gibts doch diesen Unicode-Prefix, hat der vielleicht etwas damit zu tun?
Wieso verwendest Du nicht die FileSize-Funktion? Eventuell ist die abwärtskompatibel.

arnold mueller 28. Nov 2010 14:42

AW: TFilestream.Size zu groß unter Windows 7
 
Zitat:

Zitat von alzaimar (Beitrag 1064629)
Wieso verwendest Du nicht die FileSize-Funktion? Eventuell ist die abwärtskompatibel.

FileSize - oder auch der Code von oben - würde mein Problem sicher lösen, nur würde ich auch gerne die Ursache verstehen ;-)



Zitat:

Zitat von alzaimar (Beitrag 1064629)
Da gibts doch diesen Unicode-Prefix, hat der vielleicht etwas damit zu tun?

Die Datei wurde mit einem Delphi-Compiler < 2009 erstellt. Es wäre möglich, das TFilestream im aktuellen Compiler anders damit umgeht. Das ist ein guter Hinweis dem ich nachgehen werde, danke dafür. Dir auch, Klaus01.


Gleichfalls noch einen schönen 1. Advent ...

arno

himitsu 28. Nov 2010 16:36

AW: TFilestream.Size zu groß unter Windows 7
 
Die alten Pascal-Funktionen kennen kein Unicode ... auch unter D2009+ sind und bleiben sie ANSI (da Emba dieses aus Kompatiblitätsgründen so belassen hat, oder sie hatten einfach keine Lust, sie zu erweitern)

Hast du mal soeine Datei für uns?
(auch wenn ich mir nicht vorstellen kann, daß der Dateiinhalt irgendeinen einfluß auf den TFileStream haben sollte)

Luckie 28. Nov 2010 17:04

AW: TFilestream.Size zu groß unter Windows 7
 
Von was für einer Datei reden wir hier eigentlich?

arnold mueller 29. Nov 2010 09:03

AW: TFilestream.Size zu groß unter Windows 7
 
Hallo zusammen!

um es kurz zu machen, das Problem lag weder an Windows 7 noch an TFileStream, es lag bzw. saß vor dem Bildschirm...

Unsere Software wird auf Windows 7 gehoben. Bei der Datei handelt es sich um eine Lizenzdatei, eine Binärdatei mit teils verschlüsselten und auch unverschlüsselten Datenbereichen. In der Windows 7 Umgebung bekam ich immer einen CRC Fehler - und zwar vollkommen zurecht, es war eine Testdatei - allerdings habe ich beim Vergleich mit Windows XP angenommen dieselben Dateien zu vergleichen. Dem war leider nicht so.

Immerhin hat die Fehlersuche etwas Gutes. Die Implementation von TFilestream in D2007 unterscheidet sich nicht grundlegend von der in DXE.

Und offensichtlich arbeitet EMBA an der Crossplattform-Fähigkeit

Delphi-Quellcode:
unit Classes;


// Delphi 2007

{$IFDEF MSWINDOWS}
uses Windows, Messages, SysUtils, Variants, TypInfo, ActiveX;
{$ENDIF}
{$IFDEF LINUX}
uses Libc, SysUtils, Variants, TypInfo, Types;
{$ENDIF}

// Delphi XE

{$IFDEF MSWINDOWS}
  Windows, Messages, ActiveX,
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Types, PosixSysTypes, PosixUniStd, PosixSignal,
{$ENDIF POSIX}
{$IFDEF MACOS}
  CoreServices,
{$ENDIF MACOS}
  SysUtils, Variants, TypInfo;

Danke für euer Feedback,
arno

Bernhard Geyer 29. Nov 2010 09:14

AW: TFilestream.Size zu groß unter Windows 7
 
Zitat:

Zitat von arnold mueller (Beitrag 1064725)
Und offensichtlich arbeitet EMBA an der Crossplattform-Fähigkeit

Was du in deinem Delphi2007 sieht sind überbleibsel des CLX/Kylix-Unglücks von Delphi 6/7.

Erst mit Delphi XE2 kommt wieder Plattformunabhängigkeit ins spiel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.
Seite 1 von 2  1 2      

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