82 votes

Lua vérifie si un fichier existe

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

120voto

lhf Points 30556

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 teste uniquement si le fichier peut être ouvert en lecture.

8voto

Norman Ramsey Points 115730

En utilisant du Lua simple, le mieux que vous puissiez faire est de voir si un fichier peut être ouvert en lecture, conformément à LHF. C'est presque toujours assez bon. Mais si vous en voulez plus, chargez la bibliothèque Lua POSIX et vérifiez si posix.stat( path ) renvoie non nil .

6voto

tDwtp Points 41

Je vais citer moi-même à partir d' ici

J'utilise ces (mais je l'ai fait pour vérifier 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) change de nom nom1 de nom2. Utiliser le même nom et que rien ne doit changer (sauf qu'il n'y est une monstrueuse erreur). Si tout a bien marché elle renvoie true, sinon elle renvoie nil et le errormessage. Si vous ne voulez pas utiliser l'eft, vous ne pouvez pas différencier les fichiers et répertoires sans essayer d'ouvrir le fichier (qui est un peu lent, mais ok).

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 exist(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 (exist(name) and not isFile(name))
end

Il semble plus courte, mais prend plus de temps... Également ouvrir un fichier est-il risqué

Ont le plaisir de codage!

-7voto

Archinamon Points 111
 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. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X