Quads + FileSize() = BUG ?

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Quads + FileSize() = BUG ?

Beitrag 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 ?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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]
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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....
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Muss ja nicht so sein. Mein Satz ist an der Stelle auch noch nicht zu Ende. :wink:
Antworten