2016-06-21 9 views
3

Wenn Datei /etc/haproxy/haproxy.cfg ist, sollte die Ausgabe Verzeichnisname /etc/haproxy sein.Wie bekomme ich Verzeichnispfad, gegeben einen Dateinamen in Lua, die plattformunabhängig ist

Derzeit bin ich mit

file = "/etc/haproxy/haproxy.cfg" 
sep = "/" 
file:match("(.*"..sep..")") 

Aber es ist nicht plattformunabhängig und würde auf Windows ausfallen, da der Pfadtrenn unterscheidet. Gibt es also einen plattformunabhängigen Weg, dies zu erreichen, indem man das lfs-Modul verwendet?

Antwort

2

package.config:sub(1,1) gibt Ihnen den Pfadtrenner für die Plattform, in der Lua ausgeführt wird. Siehe die manual.

+0

Beide Separatoren sind unter Windows gültig. Beispiele: 'file = io.open'C:/Python27/README.txt'' und' os.execute '"C:/Programme/Internet Explorer/iexplore.exe"' '. Aber 'package.config: sub (1,1)' gibt nur einen Backslash. –

2

Ich bin mir nicht ganz sicher, wenn Sie wollen der Pfad oder Verwendung der Pfad in einer plattformunabhängigen Art und Weise zu analysieren, sondern analysieren Sie [\\/] Muster statt / verwenden können, die verschiedene Arten von übereinstimmen Pfadtrenn:

print(file:match("(.*[\\/])")) 

Wenn Sie/Zugriff auf Dateien verwenden diese Pfade öffnen möchten, dann / Verwendung als Pfadtrenn mit Lua-API unter Windows arbeiten.

+0

Backslash sollte nicht innerhalb des Musters für Linux sein: 'local pattern_for_separator =" [/ ".. package.config: sub (1,1) .."] "' –