Gibt es eigentlich noch eine passendere Alternative zu VAL, wenn es darum geht, einen String in eine Zahl zu wandeln?
Bei cmd.exe wird die Speichergröße mit Tausender-Trennpunkten angegeben, und VAL nimmt nur die ersten Ziffern vor dem ersten Punkt.
Ich kann es natürlich auch zerstückeln und wieder zusammensetzen, aber schön ist das nicht.
Edit: Kein Thema mehr, ReplaceString(zeichen$,".","") wirft die Punkte raus.
Ordnergröße mit DirectoryEntrySize() ergibt immer nur 0
-
- Beiträge: 134
- Registriert: 18.03.2013 12:30
- Wohnort: Bayerland
- Kontaktdaten:
Re: Ordnergröße mit DirectoryEntrySize() ergibt immer nur 0
Ja, gibt es.
Code: Alles auswählen
Define Size = 1234
Debug FormatNumber(Size, 0, ",", ".")
Define Value.d = 1234567.89
Debug FormatNumber(Value, 2, ",", ".")
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: Ordnergröße mit DirectoryEntrySize() ergibt immer nur 0
Ich habe gerade mal ein bischen auf/in meiner Festplatte gestöbert, vielleicht hilft es dir ja ...
BTW: Ein Code Schnipsel ist von NicTheQuick. (Aber das siehste ja selbst.)
BTW: Ein Code Schnipsel ist von NicTheQuick. (Aber das siehste ja selbst.)
Code: Alles auswählen
EnableExplicit
Procedure.q CountFiles(Directory.s, bWithFolders = #False, NDir=0)
Protected result.q, entry.s
Directory = RTrim(Directory, #PS$)
If ExamineDirectory(NDir, Directory, "*.*") ; use this pattern to compute all files and folders
If NDir = 0
result = 0
EndIf
While NextDirectoryEntry(NDir)
If DirectoryEntryType(NDir) = #PB_DirectoryEntry_File
result + DirectoryEntrySize(NDir)
Else
entry = DirectoryEntryName(NDir)
If bWithFolders And entry <> "." And entry <> ".."
result + CountFiles(Directory + #PS$ + entry, bWithFolders, NDir + 1)
EndIf
EndIf
Wend
FinishDirectory(NDir)
EndIf
ProcedureReturn result
EndProcedure
Procedure.s SizeToStr(Size.q, bBinary = #True) ; returns i.e. '900 B' or '2 kiB' etc. | INFO: KB or KiB .. Binary = #TRUE => 1024
Protected idx, divisor, subtotal.d
subtotal = Size ; change data type of Size to subtotal
divisor = 1000 + 24 * Bool(bBinary) ; depends on KB or KiB .. strange discussion on SI stuff
If Size < divisor
ProcedureReturn FormatNumber(Size, 0, ",", ".") + " B" ; bytes
EndIf
While subtotal >= divisor
subtotal / divisor
idx + 1
Wend
ProcedureReturn FormatNumber(subtotal, 2, ",", ".") + " " + Mid("kMGTPE", idx, 1) + Left("i", Bool(bBinary)) + "B" ; yes!!
EndProcedure
;
; Original Code looked like this.....
;
; ;Procedure$ Digit(Value.q, xBinary = #True)
; ; NicTheQuick
; ; http://forums.purebasic.com/german/viewtopic.php?f=8&t=28640&sid=a8432079969094fac027e2746f3b429e&start=10
; Static Shorts$ = "kMGTPE"
; Protected idx = 0, result.d = Value ;
;
; If Value < 1024 ; easy way out ...
; ProcedureReturn StrU(Value, #PB_Quad) + " B" ; bytes
; EndIf
;
; While result >= 1024
; result / (1000 + 24 * Bool(xBinary))
; idx + 1 ; increment for präfix
; Wend
; ProcedureReturn StrD(result, 2) + " " + Mid(Shorts$, idx, 1) + Left("i", Bool(xBinary)) + "B" ;
; EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define fsize.q
fsize = CountFiles("C:\Temp\", #True)
Debug FormatNumber(fsize, 0, ",", ".") + " Bytes"
Debug SizeToStr(fsize) + "ytes"
Debug SizeToStr(fsize, #False) + "ytes"
CompilerEndIf
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Ordnergröße mit DirectoryEntrySize() ergibt immer nur 0
Wenn Du cmd.exe öffnest, bist Du in der Eingabeaufforderung und kannst Befehle per Tastatur eingeben.OlderCoder hat geschrieben: 10.04.2025 09:47 Ah ok. dir kenn ich. Aber warum fällt dann /c weg? (Ich komm mir vor wie ein kleines Kind("und waruuuum?.....")
Eigentlich könnte man meinen, dass man dasselbe im cmd.exe-Fenster eingeben kann, was auch PureBasic an cmd.exe schickt.
Möchtest Du aber der cmd.exe schon einen Befehl mit auf den Weg geben, musst Du cmd.exe /C nutzen.
Öffne mal eine Eingabeaufforderung und gib da cmd.exe ein, da passiert nix (außer, dass Du eine zweite geöffnet hast ohne es zu merken).
Gibst Du aber dort cmd.exe /C dir ein, siehst Du den Unterschied (oder eben nur Dir)
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}