Golang prüfen, ob string gültiges Pfad
Den Golang filepath-Modul (https://golang.org/pkg/path/filepath/) enthält einige Funktionen zum Bearbeiten von Pfaden und os.Stat
können verwendet werden, um zu überprüfen, ob eine Datei vorhanden ist. Gibt es eine Möglichkeit zu überprüfen, ob ein string tatsächlich Formen Sie einen gültigen Pfad an alle (unabhängig davon, ob eine Datei in diesem Pfad oder nicht)?
- AFAIK, auf Unix-Systemen alles, was nicht das null-Zeichen kann ein Gültiger Pfad sein. Nicht sicher über Windows, obwohl.
- Es scheint, dass Windows zumindest hätte Einschränkungen in Bezug auf die Laufwerksbuchstaben.
- windows hat auch Einschränkungen bei den Dateinamen; Sie können beispielsweise den Namen einer Datei
aux
oderaux.ext
woext
ist jede Erweiterung, die Sie wie seitaux
war ein reserviertes Schlüsselwort für den Zugriff auf den aux-Anschluss im MS-DOS-oder so ähnlich - "Gültiger Pfad" ist stark vom jeweiligen system abhängig. Die meisten Systeme erlauben nicht die
:
Charakter. Unter Windows sind alle diese nicht zulässig sind:?*:|\"
. Ext3-Dateisystem für Unix nur verbietet/
und dem null-char, aber linux übernimmt auch die Dateisysteme NTFS und FAT auch (die transparent ist, um Ihre app), so würde ich nur zulassen, dass Pfad-Namen zulässig sind, die auf alle Systeme... ich würde nicht zulassen, dass der char NULL und alle diese:?%*:|\"
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses problem klingt sehr einfach, ist es aber eigentlich nicht. Hier zwei mögliche Lösungen die ich gefunden habe :
Lösung 1 - Akademischen
Die Idee hier ist, um zu überprüfen, einen bestimmten Dateipfad auf Regeln basieren.
Probleme
Betriebssystem
Die erste ist die einfachste. Gehen bietet verschiedene tools für die OS-spezifischen Dateinamen/Trennzeichen/...
Beispiel in der os Paket:
Weiteres in der Dateipfad Paket:
Dateisystem
Dateisysteme haben unterschiedliche Einschränkungen. Die maximale Länge oder die charset-erlaubt variieren. Leider, es gibt keine Weise können Sie sagen, (nicht so weit wie ich weiß, zumindest), das Dateisystem(s) Ihren Weg durchziehen.
Reservierte Schlüsselwörter
Haben eine schwarze Liste aller reservierten Schlüsselwörter für ein bestimmtes OS.
Umsetzung
Für diese Lösung, ich würde bauen ein lexer/parser.
Der Nachteil ist, dass es würde nicht garantieren 100%, dass ein Dateipfad gültig ist.
Lösung 2 - Empirische
Versuchen, erstellen Sie die Datei, und löschen Sie es gleich nach.
Den Haupt-Vorteil dieser Lösung ist, dass es ist einfach und genauer. Wenn eine Datei bereits vorhanden ist oder geschaffen werden können, an einen bestimmten Pfad, es bedeutet, dass es gültig ist. Jedoch, diese Lösung kann auch ungültig gültige Pfade, da der Zugang eingeschränkt ist.
Zusammenfassung
Die erste Lösung weniger genau sein als die zweite, obwohl es richtiger, von einem puristischen Standpunkt. Die Lösung, die Sie abholen sollte, hängt von Ihren Bedürfnissen. Bevorzugen Sie false-positives oder false-negatives? Die erste Lösung kann Ihnen false positives, der zweite falsch-negative Befunde.