Seite 1 von 1

FileSize - Wildcards werden unterstützt?

Verfasst: 09.10.2015 21:33
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.

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 09.10.2015 21:57
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.

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 09.10.2015 22:33
von RSBasic
Vielen Dank für die Information. :allright:

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 10.10.2015 19:48
von _JON_
Ist ein Feature, man kann z.B. einfach ermitteln ob ein bestimmter Dateityp in einem Ordner existiert.

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 10.10.2015 22:39
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.

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 10.10.2015 23:11
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).

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 10.10.2015 23:24
von NicTheQuick
Unter Linux sind alle UTF-8 Zeichen außer / erlaubt. Ich nutze selbst öfter mal '?' und ':'.

Re: FileSize - Wildcards werden unterstützt?

Verfasst: 10.10.2015 23:24
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.