Lua vérifier si un fichier existe
Comment puis-je vérifier si un fichier existe en utilisant lua?
9 réponses
Essayer
function file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
mais notez que ce code ne teste si le fichier peut être ouvert en lecture.
en utilisant du Lua simple, le mieux que vous pouvez faire est de voir si un fichier peut être ouvert pour lire, comme selon LHF. C'est presque toujours assez bon. Mais si vous voulez plus, chargez la bibliothèque Lua POSIX et vérifiez si posix.stat(
chemin )
retourne non- nil
.
je me cite de ici
je les utilise (mais je vérifie en fait l'erreur):
require("lfs")
-- no function checks for errors.
-- you should check for them
function isFile(name)
if type(name)~="string" then return false end
if not isDir(name) then
return os.rename(name,name) and true or false
-- note that the short evaluation is to
-- return false instead of a possible nil
end
return false
end
function isFileOrDir(name)
if type(name)~="string" then return false end
return os.rename(name, name) and true or false
end
function isDir(name)
if type(name)~="string" then return false end
local cd = lfs.currentdir()
local is = lfs.chdir(name) and true or false
lfs.chdir(cd)
return is
end
os.renommer(nom1, nom2) renommer nom1 de nom2. Utilisez le même nom et rien ne devrait changer (sauf qu'il y a une erreur de badass). Si tout fonctionne bien il retourne vrai, sinon il retourne nul et le errormessage. Si vous ne voulez pas utiliser l'eft, vous ne pouvez pas différencier les fichiers et répertoires sans en essayant d'ouvrir le fichier (qui est un peu lent, mais ok).
donc sans LuaFileSystem
-- no require("lfs")
function exists(name)
if type(name)~="string" then return false end
return os.rename(name,name) and true or false
end
function isFile(name)
if type(name)~="string" then return false end
if not exists(name) then return false end
local f = io.open(name)
if f then
f:close()
return true
end
return false
end
function isDir(name)
return (exists(name) and not isFile(name))
end
il semble plus court, mais prend plus de temps... Également ouvrir un fichier est-il risqué
m'amuser à coder!
un souci d'exhaustivité: Vous pouvez aussi tenter votre chance avec path.exists(filename)
. Je ne suis pas sûr quelles distributions Lua ont réellement cet espace de nom path
( update : Penlight ), mais au moins il est inclus dans Torch:
$ th
______ __ | Torch7
/_ __/__ ________/ / | Scientific computing for Lua.
/ / / _ \/ __/ __/ _ \ | Type ? for help
/_/ \___/_/ \__/_//_/ | https://github.com/torch
| http://torch.ch
th> path.exists(".gitignore")
.gitignore
th> path.exists("non-existing")
false
debug.getinfo(path.exists)
me dit que sa source est dans torch/install/share/lua/5.1/pl/path.lua
et il est mis en œuvre comme suit:
--- does a path exist?.
-- @string P A file path
-- @return the file path if it exists, nil otherwise
function path.exists(P)
assert_string(1,P)
return attrib(P,'mode') ~= nil and P
end
Si vous êtes prêt à utiliser lfs
, vous pouvez utiliser lfs.attributes
. Il retournera nil
en cas d'erreur:
require "lfs"
if lfs.attributes("non-existing-file") then
print("File exists")
else
print("Could not get attributes")
end
bien qu'il puisse retourner nil
pour d'autres erreurs autres qu'un fichier non existant, s'il ne retourne pas nil
, le fichier existe certainement.
j'utilise:
if os.isfile(path) then
...
end
J'utilise LUA 5.3.4.
une réponse qui est Windows ne vérifie que les fichiers et dossiers, et ne nécessite pas de paquets supplémentaires. Il retourne true
ou false
.
io.popen("if exist "..PathToFileOrFolder.." (echo 1)"):read'*l'=='1'
io.popen(...): read'*l' - exécute une commande dans l'invite de commande et lit le résultat du CMD stdout
s'il existe - commande CMD pour vérifier si un objet existe
(echo 1) - imprime 1 à stdout de l'invite de commande
IsFile = function(path)
print(io.open(path or '','r')~=nil and 'File exists' or 'No file exists on this path: '..(path=='' and 'empty path entered!' or (path or 'arg "path" wasn\'t define to function call!')))
end
IsFile()
IsFile('')
IsFIle('C:/Users/testuser/testfile.txt')
Semble bon pour tester votre chemin. :)