Lua vérifier si un fichier existe

Comment puis-je vérifier si un fichier existe en utilisant lua?

56
demandé sur Amir 2011-02-14 13:18:21

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.

91
répondu lhf 2011-02-14 11:26:12

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 .

6
répondu Norman Ramsey 2012-08-31 23:32:44

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!

5
répondu tDwtp 2017-05-23 12:34:36

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
3
répondu bluenote10 2015-10-12 12:11:49

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.

3
répondu Romário 2015-10-22 19:33:20

j'utilise:

if os.isfile(path) then
    ...
end

J'utilise LUA 5.3.4.

2
répondu Jesse Chisholm 2017-12-08 16:56:39

vous pouvez également utiliser le paquet 'paths'. ici 's le lien vers le paquet

puis à Lua do:

require 'paths'

if paths.filep('your_desired_file_path') then
    print 'it exists'
else
    print 'it does not exist'
end
0
répondu Amir 2017-05-10 00:50:15

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

0
répondu WalyKu 2017-08-23 15:23:44
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. :)

-6
répondu Archinamon 2011-02-14 12:13:56