[ Impressum ]

LiveCode FileSpecValidatorLib

www.Rozek.de > LiveCode > FileSpecValidatorLib
Die "FileSpecValidatorLib" ist ein kleiner LiveCode [1] "Library Stack" mit einer Reihe von Kommandos und Funktionen zur Validierung von Datei- und Verzeichnis-Namen und -Bezeichnern für verschiedene Dateisysteme.

Die Validierung von Datei- und Verzeichnis-Namen ist erstaunlich kompliziert (vor allem unter den furchtbar abstrusen Windows-Systemen) und wird deshalb von Programmierern gerne dem Betriebssytem überlassen anstatt die Prüfung bereits in der Anwendung selbst vorzunehmen. Nichtsdestotrotz ist es häufig wünschenswert, die Gültigkeit eines gegebenen Datei- und Verzeichnis-Namen rechtzeitig vor dem eigentlichen Zugriff auf das Dateisystem zu kennen - und sei es nur, um eine vernünftige Fehlermeldung auszugeben. Dieser kleine Library Stack soll in solcherlei Situationen eine Hilfe sein.

Die "FileSpecValidatorLib" unterstützt FAT, VFAT, FAT32, NTFS, HFS+ (Mac OS X), diverse UNIX-Dateisysteme und die "Unified Naming Convention" UNC. Gegen welches Dateisystem im Einzelfall zu prüfen ist, wird entweder explizit vorgegeben oder (anhand des eingesetzten Betriebssystems) automatisch erkannt. Die Validatoren für Dateisysteme von Microsoft (FAT, VFAT, FAT32 und NTFS) unterstützen sowohl "\" als auch "/" als Separatoren für Verzeichnisnamen, können jedoch nicht mit "\\?\"- oder "\\.\"-Präfixen umgehen - es sei denn, diese werden in Verbindung mit einer UNC-Angabe (also z.B. als "\\?\UNC"-Präfix) eingesetzt: in diesem Fall wird das führende "\\?\UNC" einfach ignoriert.

Download und Installation

Die "FileSpecValidatorLib" liegt als unverschlüsselter LiveCode-Stack bereit und kann von hier aus heruntergeladen werden:
Nach dem Herunterladen legen Sie die "FileSpecValidatorLib" einfach in einem Verzeichnis Ihrer Wahl ab - eine explizite Installation ist nicht erforderlich.

Verwendung in Desktop-Anwendungen

Die "FileSpecValidatorLib" wurde als LiveCode "Library Stack" implementiert und muss deshalb vor ihrer Verwendung zunächst einmalig mithilfe der Anweisung

start using stack "FileSpecValidatorLib"

eingebunden werden. Zweckmäßigerweise wird diese Anweisung im Rahmen einer preOpenStack-Prozedur von einem MainStack ausgeführt.

Soll aus dem MainStack später eine eigenständige Anwendung werden, muss die "FileSpecValidatorLib" außerdem Bestandteil der Liste der "Stack Files" zu diesem MainStack sein (am einfachsten geschieht dies mithilfe der "Standalone Application Settings" aus der LiveCode-Entwicklungsumgebung heraus).

Verwendung in mobilen Anwendungen

Die "FileSpecValidatorLib" kann auch in mobilen Anwendungen eingesetzt werden. Allerdings muss sie dann - anders als für eigenständige Desktop-Anwendungen - in die Liste der "non-stack files" aufgenommen und mithilfe der Anweisung

start using stack (specialFolderPath("engine") & "/FileSpecValidatorLib.livecode")

in den MainStack eingebunden werden. Die Liste der "non-stack files" findet sich ebenfalls auf der Seite "Copy Files" in den "Standalone Application Settings" der LiveCode-Entwicklungsumgebung.

Funktionsübersicht

Die "FileSpecValidatorLib" enthält insgesamt vier Gruppen von Kommandos und Funktionen:
  • Kommandos zur Validierung von Datei- und Verzeichnis-Namen und -Bezeichnern
    prüfen die übergebenen Werte auf formale Korrektheit und werfen im Fehlerfall eine Ausnahme;
     
  • Funktionen zur Validierung von Datei- und Verzeichnis-Namen und Bezeichnern
    prüfen die übergebenen Werte auf formale Korrektheit und liefern true im Erfolgs- bzw. false im Fehlerfall;
     
  • Kommandos zur Validierung optionaler Argumente (allowXXX)
    prüfen die übergebenen Argumente (sofern vorhanden) auf formale Korrektheit und werfen im Fehlerfall eine Ausnahme;
     
  • Kommandos zur Validierung erforderlicher Argumente (expectXXX)
    prüfen das Vorhandensein der erwarteten Argumente und deren Inhalt auf formale Korrektheit - im Fehlerfall wird eine Ausnahme geworfen.
Die zuerst genannte Gruppe enthält die eigentliche Funktionalität - alle anderen Kommandos und Funktionen vereinfachen lediglich deren Nutzung.

Kommandos zur Validierung von Datei- und Verzeichnis-Namen und Bezeichnern

Die Namen der Kommandos aus dieser Gruppe beginnen alle mit validate. Entspricht das mitgegebene Argument Candidate der überprüften Syntax, läuft die Prozedur ohne weitere Vorkommnisse durch und das aufrufende Skript kann fortgesetzt werden. Anderenfalls wird eine dem Fehler entsprechende Ausnahme geworfen, die das aufrufende Skript auswerten kann.

Die Kommandos sind (in alphabetischer Reihenfolge):

validateFileName <Candidate> [, FileSystem]


validateFileName stellt sicher, dass der übergebene Candidate einen gültigen Dateinamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

validateFileSpec <Candidate> [, FileSystem]


validateFileSpec stellt sicher, dass der übergebene Candidate einen gültigen Datei-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

validateFolderName <Candidate> [, FileSystem]


validateFolderName stellt sicher, dass der übergebene Candidate einen gültigen Verzeichnisnamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

validateFolderSpec <Candidate> [, FileSystem]


validateFolderSpec stellt sicher, dass der übergebene Candidate einen gültigen Verzeichnis-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

Funktionen zur Validierung Netz-bezogener Angaben

Die Namen der Funktionen aus dieser Gruppe beginnen alle mit valid. Entspricht das mitgegebene Argument Candidate der überprüften Syntax, kehrt die Funktion am Ende mit dem Ergebnis true zurück. Anderenfalls wird false zurückgegeben (jedoch keine Ausnahme geworfen!).

Die Funktionen sind (in alphabetischer Reihenfolge):

validFileName <Candidate> [, FileSystem]


validFileName prüft, ob der übergebene Candidate einen gültigen Dateinamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.


validFileSpec <Candidate> [, FileSystem]


validFileSpec prüft, ob der übergebene Candidate einen gültigen Datei-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

validFolderName <Candidate> [, FileSystem]


validFolderName prüft, ob der übergebene Candidate einen gültigen numerische Verzeichnisnamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

validFolderSpec <Candidate> [, FileSystem]


validFolderSpec prüft, ob der übergebene Candidate einen gültigen Verzeichnis-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

Validierung optionaler Argumente

Diese Gruppe von Kommandos (deren Name mit "allow" beginnt) validiert optionale Argumente - von den Kommandos zur Validierung mandatorischer Argument unterschieden sich diese Prozeduren dadurch, dass das übergebene Argument auch empty sein darf.

Die Kommandos sind (in alphabetischer Reihenfolge):

allowFileName <ArgName>, <ArgValue> [, FileSystem]


allowFileName stellt sicher, dass der übergebene ArgValue entweder fehlt (d.h. empty ist) oder einen gültigen Dateinnamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

allowFileSpec <ArgName>, <ArgValue> [, FileSystem]


allowFileSpec stellt sicher, dass der übergebene ArgValue entweder fehlt (d.h. empty ist) oder einen gültigen Datei-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

allowFolderName <ArgName>, <ArgValue> [, FileSystem]


allowFolderName stellt sicher, dass der übergebene ArgValue entweder fehlt (d.h. empty ist) oder einen gültigen Verzeichnisnamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

allowFolderSpec <ArgName>, <ArgValue> [, FileSystem]


allowFolderSpec stellt sicher, dass der übergebene ArgValue entweder fehlt (d.h. empty ist) oder einen gültigen Verzeichnis-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

Validierung erforderlicher Argumente

Diese Gruppe von Kommandos (deren Name mit "expect" beginnt) validiert mandatorische Argumente - von den Kommandos zur Validierung optionaler Argument unterschieden sich diese Prozeduren dadurch, dass das übergebene Argument niemals empty sein darf.

Die Kommandos sind (in alphabetischer Reihenfolge):

expectFileName <ArgName>, <ArgValue> [, FileSystem]


expectFileName stellt sicher, dass der übergebene ArgValue vorhanden (also nicht empty) ist und einen gültigen Dateinamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

expectFileSpec <ArgName>, <ArgValue> [, FileSystem]


expectFileSpec stellt sicher, dass der übergebene ArgValue vorhanden (also nicht empty) ist und einen gültigen Datei-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

expectFolderName <ArgName>, <ArgValue> [, FileSystem]


expectFolderName stellt sicher, dass der übergebene ArgValue vorhanden (also nicht empty) ist und einen gültigen Verzeichnisnamen enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

expectFolderSpec <ArgName>, <ArgValue> [, FileSystem]


expectFolderSpec stellt sicher, dass der übergebene ArgValue vorhanden (also nicht empty) ist und einen gültigen Verzeichnis-Bezeichner enthält. Falls FileSystem angegeben (und nicht empty) ist, muss dieses den Namen eines unterstützten Dateisystems enthalten (d.h., entweder "FAT", "VFAT", "FAT32", "NTFS", "UNC", "UNIX" oder "HFS+") und auf diese Weise angeben, welche Syntaxregeln auf Candidate angewendet werden sollen. Fehlt FileSystem (oder ist es empty), so werden die Regeln des vom eingesetzten Betriebssystem üblicherweise genutzten Dateisystems angewendet.

ArgName muss ein syntaktisch korrekter, nicht-leerer LiveCode-Bezeichner sein und wird dazu verwendet, für eine evtl. zu werfende Ausnahme eine sinnvolle Fehlermeldung zu bilden.

System-Anforderungen

Die "FileSpecValidatorLib" benötigt LiveCode 6.x oder neuer und funktioniert unabhängig vom jeweiligen Betriebssystem sowohl auf stationären wie auch auf mobilen Plattformen.

Abhängigkeiten

Die "FileSpecValidatorLib" verwendet intern die "BasicLib", die "ValidatorLib" und die "NetValidatorLib" - beim Einsatz der "FileSpecValidatorLib" müssen diese beiden also ebenfalls vorhanden sein.

Automatisierte Tests

Für die "FileSpecValidatorLib" steht auch ein separater Stack mit automatisierten Tests dieser Bibliothek bereit:
Beim Öffnen dieses Stack wird zugleich auch das Kommando performTests ausgeführt, welches für die eigentlichen Tests zuständig ist. Am Ende sollte die "Message Box" der LiveCode-Entwicklungsumgebung erscheinen und die Meldung

all tests passed

angezeigt werden - anderenfalls sollte dort stattdessen eine Fehlermeldung mit Hinweisen zum fehlgeschlagenen Test zu finden sein.

Bekannte Fehler

Derzeit sind keine Fehler der "FileSpecValidatorLib" bekannt.

Lizenz-Hinweis

Die "FileSpecValidatorLib" und die zugehörigen Tests unterliegen der "Creative Commons Namensnennung 4.0 Unported Lizenz", was im Wesentlichen bedeutet, dass Sie beides (selbst in kommerziellem Rahmen) sowohl verwenden als auch verändern dürfen, sofern Sie Ihre Änderungen als solche kenntlich machen und an geeigneter Stelle auf mich als den ursprünglichen Autor hinweisen.

                       
Viel Spaß mit LiveCode und der "FileSpecValidatorLib"! Creative Commons Lizenzvertrag

Literaturhinweise

[1]
(RunRev Ltd.)
LiveCode | Create apps for multiple platforms. Quickly. Easily. Free
LiveCode ist eine (dem legendären HyperCard von Apple) nachempfundene Entwicklungsumgebung sowohl für stationäre (Windows, Linux, MacOS X) als auch für mobile (IOS, Android) Anwendungen. Ein visueller Editor ermöglicht den schnellen Entwurf von Bedienoberflächen, die der englischen Sprache nachempfundene Programmiersprache erlaubt auch Nicht-Programmierprofis die Entwicklung professioneller Anwendungen und das Konzept der "Modifikation am laufenden Programm" vereinfacht Test und Fehlerbehebung.