Seite 1 von 2

Quads + FileSize() = BUG ?

Verfasst: 01.01.2007 20:21
von al90
Hi,

Folgender Code funktioniert bei mir nicht.:

Code: Alles auswählen

Index.l=1
Dim Files$(10)
Files$(1)="c:\rgb.iff"
TotalSize.q + FileSize(Files$(Index))
Debug TotalSize
Übergebe ich jedoch statt Index.l direkt 1 >Files$(1)<, dann klappt's seltsamerweise.
Das problem scheint auch nur im zusammenhang mit Quads aufzutreten.
Ein bug in PB ? War dass schon bekannt ?

Verfasst: 02.01.2007 14:23
von AND51
Bug bestätigt.
Eine 17 Byte große Datei wird nicht 17 zurückgeben.
Die Funktion FileSize() scheint höchstens 'Files$(1)' zu akzeptieren oder eine String Variable (wenn ich den Dateinamen vorher temporär in eine String Variable speichere).

Code: Alles auswählen

NewList Files.s()

AddElement(Files())
	Files()="C:\ailog.txt" ; 17 Byte

TotalSize.q + FileSize(Files())

Debug TotalSize
Mit LinkedLists hingegen funktioniert es.

Ganz nebenbei: Ist das eine Frage zu deinem "Total-Commander Clone (FileMaster)"? :D Wie läuft's eigentlich damit?

Verfasst: 02.01.2007 14:25
von AND51
Warum fängst du bei einem Array eigentlich an, bei 1 zu zählen? Arrays werden mit 0 beginnend nummeriert:

Code: Alles auswählen

Index.l=0
Dim Files$(10) 
Files$(0)="c:\ailog.txt" ; 17 Byte
TotalSize.q + FileSize(Files$(Index)) 
Debug TotalSize ; korrekt
So funktioniert es.

Trotzdem: Bug bleibt Bug...

Verfasst: 02.01.2007 15:21
von #NULL
hatte glaub' ich schonmal jemand so ein problem.

Code: Alles auswählen

TotalSize.q = TotalSize + FileSize(Files$(Index))
..geht auch nicht

aber das geht:

Code: Alles auswählen

TotalSize.q = FileSize(Files$(Index)) + TotalSize

[nur nebenbei: bei rückgabewerten von FileSize() wie etwa -1 wird die summe vermurkst, wollte es nur erwähnen]

Verfasst: 02.01.2007 17:45
von AND51
> [nur nebenbei: bei rückgabewerten von FileSize() wie etwa -1 wird die summe vermurkst, wollte es nur erwähnen]
Nun, ich gehe mla davon aus, dass in al90's Program eine vorige Prüfung vonstatten geht, die prüft, ob die Datei auch wirklich vorhanden ist.

> TotalSize.q = TotalSize + FileSize(Files$(Index))
> ..geht auch nicht
Doch, wenn Index = 0. Arrays beginnen bei 0 (Dim MyArray.l(10) erstellt ein Array mit 11 Feldern). Aus Faulheit mache ich das manchmal aber auch so.

Irgendwie sind Arrays out... :mrgreen: Seit ich LinkedLists kenne, bin ich hin und weg (habe sowas noch nie in einer anderen Sprache gesehen).

Verfasst: 02.01.2007 18:43
von Andre
Habe Fred + freak mal auf diesen Thread zwecks Überprüfung hingewiesen. "Richtiger" Bug-Report mit Beschreibung und Beispiel im englischen Forum ist aber trotzdem besser....

Verfasst: 02.01.2007 20:32
von al90
@Andre

Danke! :wink: Jetzt weis Fred zumindest schonmal bescheid. :allright:

@AND51

ich arbeite mit Hochdruck an der fertigstellung von FileMaster. Zuerst dachte
ich, ich würde es noch 2006 schaffen. Aber die Packer-integrierungen
kosteten mich doch recht viel zeit. Vorallendingen die Unrar.dll, da dies
für mich auch mehr oder weniger Neuland bedeutete und ich mich erstmal
in der materie einarbeiten musste. Aber jetzt ist so gut wie alles fertig.
Lediglich ein "About-Window" und ein FileViewer muss ich noch machen.

Wegen den Arrays:
Diese benutze ich aus performance gründen. Sind halt schneller als LinkedLists.
Und das mit Element(0) ist mir natürlich bekannt, aber ich beginne immer
bei "1" da es zum rest des Codes einfacher Handzuhaben ist. :wink:
AND51 hat geschrieben: Nun, ich gehe mla davon aus, dass in al90's Program eine vorige Prüfung vonstatten geht, die prüft, ob die Datei auch wirklich vorhanden ist.
Ich lese alles über ExamineDirectory ein. Dadurch entfällt natürlich die
überprüfung auf File-Existänz. Der Bug fiel mir auf, als meine abfrage
zur Ermittlung des Platzbedarfs des Ziellaufwerks bei Kopier-
vorgängen versagte. Kopieren eines Ordners mit bis zu 4GB grossen
Dateien wurden einfach ohne die meldung Nicht genug platz auf Ziellaufwerk
kopiert, obwohl nur 300MB frei waren. Beim Debuggen merkte ich dann
plötzlich das alle möglichen Fantasiewerte zurückgegeben wurden.
#NULL hat geschrieben: aber das geht:

Code: Alles auswählen

TotalSize.q = FileSize(Files$(Index)) + TotalSize 
Habe ich noch nicht ausprobiert. Ich habe es jetzt so gelöst, das der wert
erstmal mit "=" statt "+" in einem anderen Quad zwichengespeichert wird,
bevor er zur TotalSize.q hinzu addiert wird.

Verfasst: 10.01.2007 15:38
von NicTheQuick
Wenn man die Größe als Long ausliest, dann funktioniert es. :mrgreen:
Außerdem steht bei mir im HighLong immer 4. Ich schätze mal, dass FileSize
immer 32 Bit zurückgibt und die restlichen 32 Bit kommen vom Stack oder
irgendsowas. Also müsste Fred noch eine FileSize()-Version für Quads basteln
oder der Compiler erkennt sie nur nicht richtig als solche, wenn es um
Addition geht.

Code: Alles auswählen

Index.l=1
Dim Files$(10)
Files$(1)="c:\config.sys"
TotalSize.q + FileSize(Files$(Index))
Debug PeekL(@TotalSize)
Debug PeekL(@TotalSize + 4)
Debug HexQ(TotalSize)
Debug TotalSize

Verfasst: 10.01.2007 16:25
von AND51
> Also müsste Fred noch eine FileSize()-Version für Quads basteln
Ich dachte, das sei schon längst geschehen? Irgendein ranghohes Tier im PB-Team hat das gesagt, bin mir sicher. Also das ist aber jetzt der Hammer... :o

Verfasst: 10.01.2007 17:11
von NicTheQuick
Muss ja nicht so sein. Mein Satz ist an der Stelle auch noch nicht zu Ende. :wink: