FileSize - Wildcards werden unterstützt?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

FileSize - Wildcards werden unterstützt?

Beitrag von RSBasic »

Hola,

habt ihr gewusst, dass man Wildcards bei FileSize() benutzen kann? Das wäre mir neu und ich habe das auch noch nie ausprobiert, warum auch. :D
Ich weiß nicht, ob es nur ein Windows-Feature ist oder ob es auch bei Linux und MacOS ist, aber gerade habe ich zufällig herausgefunden, dass man Wildcards im Dateinamen verwenden kann. :roll:

Beispiel 1:

Code: Alles auswählen

Debug FileSize("D:\Meine*.txt")
Beispiel 2:

Code: Alles auswählen

Debug FileSize("D:\M?i?e T?s?d?t?i.t?t")
Aber warum? Wer braucht sowas bzw. ist das überhaupt sinnvoll? War das schon immer so?
Warum sollte man Wildcards verwenden, wenn man die Größe einer bestimmten Datei ermitteln möchte? Bei einer Liste verschiedener Dateien kann ich das ja noch nachvollziehen. Beispielsweise eine Funktion zum Ermitteln der Gesamtgröße aller Dateien (z.B. alle Textdateien "*.txt"), aber bei einer einzigen Datei?
Da möchte ich doch nur von dieser Datei die Größe wissen und nicht irgendeine beliebige Datei, die er zufällig findet.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: FileSize - Wildcards werden unterstützt?

Beitrag von Sicro »

FileSize() verwendet unter Windows FindFirstFile
und diese API-Funktion unterstützt Wildcards.

Unter Linux funktioniert das bei mir nicht, daher vermute ich, dass es unter MacOS auch nicht funktioniert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: FileSize - Wildcards werden unterstützt?

Beitrag von RSBasic »

Vielen Dank für die Information. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: FileSize - Wildcards werden unterstützt?

Beitrag von _JON_ »

Ist ein Feature, man kann z.B. einfach ermitteln ob ein bestimmter Dateityp in einem Ordner existiert.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: FileSize - Wildcards werden unterstützt?

Beitrag von RSBasic »

Hm, ich finde diese Wildcard-Unterstützung immer noch sinnfrei.

Wenn ich explizit die Größe einer Datei haben möchte, dann will ich nicht, dass er doch zufällig eine Datei findet, nur weil im Pfad Zeichen vorhanden sind, die nicht vorhanden sein dürfen.
Wenn ich eine Datei mit ReadFile() öffnen möchte, dann werden keine Wildcards unterstützt und das Öffnen schlägt fehl. Bei FileSize() aber nicht. Und das ist das Problem. Es ist nicht einheitlich.

Leider kann ich die Wildcard-Unterstützung ohne API nicht ausschalten. Deshalb habe ich folgendes geschrieben:

Code: Alles auswählen

Procedure.s RTrimChars(source$, charlist$);Autor: Little John
  Protected p
  
  p = Len(source$)
  While p >= 1 And FindString(charlist$, Mid(source$,p,1)) <> 0
    p - 1
  Wend
  
  ProcedureReturn Left(source$, p)
EndProcedure

Procedure FileSizeEx(FileName$)
  FileName$ = ReplaceString(FileName$, "*", "_")
  FileName$ = ReplaceString(FileName$, "?", "_")
  FileName$ = ReplaceString(FileName$, "<", "_")
  FileName$ = ReplaceString(FileName$, ">", "_")
  FileName$ = ReplaceString(FileName$, Chr(34), "_")
  
  If FileSize(FileName$) <> -2
    If Len(FileName$) <> Len(RTrimChars(FileName$, "/\"))
      FileName$ + "_"
    EndIf
  EndIf
  
  ProcedureReturn FileSize(FileName$)
EndProcedure

Macro FileSize(FileName)
  FileSizeEx(FileName)
EndMacro
Wenn jemand unter Windows sowas auch haben möchte, kann er den oberen Code nutzen.
Oder falls der Code nicht vollständig ist, kann der Code verbessert und hier gepostet werden.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: FileSize - Wildcards werden unterstützt?

Beitrag von GPI »

Mag sinnlos sein, aber normal tritt das ja auch nicht auf.
Aber ich würde dir eine Überarbeitung deiner Routine empfehlen. Anstatt die "verbotenen" Zeichen durch _ zu ersetzen, würde ich danach suchen und wenn sie gefunden werden den Wert "-3" zurück geben.

Nur so als anwendungsbeispiel: Du möchtest eine Datei erstellen und überprüfst ob schon eine da ist. Bei deinen Code würde da definitiv nö rauskommen und anschließend wird versucht mit CreateFile die Datei zu erstellen. Das dürfte dann auch fehlschlagen. Wobei ich das nicht ausprobiert hab, wenns ungünstig läuft sucht CreateFile eine passende Datei aus und überschreibt sie einfach so :)

Hinzu kommen noch andere Probleme. Unter Linux können Zeichen erlaubt sein, die unter Windows verboten sind. Das kann man mit CheckFilename() systembedingt überprüfen (Achtung \ und / sind da natürlich auch verboten, weil das Pfadbegrenzer sind).

Wobei ich gerade bemerke, das CheckFilename() bei "aux.txt" alles in Ordnung sagt, das ist aber unter Windows verboten. Keine datei darf aux heißen (endung ist egal).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
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

Re: FileSize - Wildcards werden unterstützt?

Beitrag von NicTheQuick »

Unter Linux sind alle UTF-8 Zeichen außer / erlaubt. Ich nutze selbst öfter mal '?' und ':'.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: FileSize - Wildcards werden unterstützt?

Beitrag von ts-soft »

GPI hat geschrieben:(Achtung \ und / sind da natürlich auch verboten, weil das Pfadbegrenzer sind).
Der Backslash (\) ist unter Linux ein normales Zeichen, also Teil des Dateinamen!
Wird zwar im allg. nicht verwendet, weil es einfach zu gefährlich ist, ist aber erlaubt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten