Luaを使用してファイルが存在するかどうかを確認するにはどうすればよいですか?
試して
function file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
ただし、このコードは、ファイルを読み取り用に開くことができるかどうかのみをテストすることに注意してください。
プレーンなLuaを使用してできることは、LHFに従ってファイルを読み取り用に開くことができるかどうかを確認することです。ほとんどの場合、これで十分です。しかし、さらに必要な場合は、 Lua POSIXライブラリ をロードし、posix.stat(
path)
は非nil
を返します。
here から引用します
私はこれらを使用します(ただし、実際にエラーをチェックします):
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.rename(name1、name2)は、name1をname2に名前変更します。同じ名前を使用し、何も変更しないでください(例外的なエラーがある場合を除く)。すべてうまくいった場合はtrueを返し、そうでない場合はnilとエラーメッセージを返します。 lfsを使いたくない場合は、ファイルを開こうとせずにファイルとディレクトリを区別することはできません(少し遅いですが大丈夫です)。
だから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
短く見えますが、時間がかかります...また、ファイルを開くと危険です
コーディングを楽しんでください!
私が使う:
if os.isfile(path) then
...
end
LUA 5.3.4を使用しています。
lfs
を使用する場合は、lfs.attributes
。エラーの場合、nil
を返します。
require "lfs"
if lfs.attributes("non-existing-file") then
print("File exists")
else
print("Could not get attributes")
end
存在しないファイル以外の他のエラーに対してnil
を返すことができますが、nil
を返さない場合、ファイルは確実に存在します。
完全を期すために、path.exists(filename)
を使って運を試すこともできます。どのLuaディストリビューションに実際にこのpath
名前空間があるかわかりません(update: Penlight )少なくともトーチに含まれています:
_$ 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)
は、そのソースが_torch/install/share/lua/5.1/pl/path.lua
_にあり、次のように実装されていることを示します。
_--- 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
_
Windowsである回答では、ファイルとフォルダーのみがチェックされ、追加のパッケージは必要ありません。 true
またはfalse
を返します。
io.popen("if exist "..PathToFileOrFolder.." (echo 1)"):read'*l'=='1'
io.popen(...):read '* l'-コマンドプロンプトでコマンドを実行し、CMD stdoutから結果を読み取ります
存在する場合-オブジェクトが存在するかどうかを確認するCMDコマンド
(echo 1)-コマンドプロンプトの標準出力に1を出力
「paths」パッケージを使用することもできます。 ここ はパッケージへのリンクです
次に、Luaで:
require 'paths'
if paths.filep('your_desired_file_path') then
print 'it exists'
else
print 'it does not exist'
end
ライブラリソリューションの場合は、paths
またはpath
のいずれかを使用できます。
公式ドキュメント of paths
から:
path.filep(path)
パスが既存のファイルを参照しているかどうかを示すブール値を返します。
path.dirp(パス)
パスが既存のディレクトリを参照しているかどうかを示すブール値を返します。
名前は少し奇妙ですが、paths.filep()
を使用して、パスが存在し、ファイルであるかどうかを確認できます。 paths.dirp()
を使用して、それが存在し、それがディレクトリであるかどうかを確認します。とても便利。
path
よりもpaths
を好む場合は、path.exists()
をassert()
とともに使用して、パスの存在を確認し、同じ値を取得できます。時間。断片からパスを構築するときに役立ちます。
_prefix = 'some dir'
filename = assert(path.exist(path.join(prefix, 'data.csv')), 'data.csv does not exist!')
_
ブール結果を確認したいだけなら、path.isdir()
とpath.isfile()
を使用してください。彼らの目的は彼らの名前からよく理解されています。
これに対するあなたの特定の目的がわからない場合、または希望する実装を念頭に置いている場合は必ずしも理想的ではありませんが、ファイルを開いてその存在を確認することができます。
local function file_exists(filename)
local file = io.open(filename, "r")
if (file) then
-- Obviously close the file if it did successfully open.
file:close()
return true
end
return false
end
io.open
は、ファイルを開けなかった場合にnil
を返します。副次的な注意事項として、これがassert
と共に使用されて、指定されたファイルを開けない場合に役立つエラーメッセージを生成する理由です。例えば:
local file = assert(io.open("hello.txt"))
ファイルhello.txt
は存在しません。stdin:1: hello.txt: No such file or directory
。
このようなことはどうですか?
function exist(file)
local isExist = io.popen(
'[[ -e '.. tostring(file) ..' ]] && { echo "true"; }')
local isIt = isExist:read("*a")
isExist:close()
isIt = string.gsub(isIt, '^%s*(.-)%s*$', '%1')
if isIt == "true" then
return true
end
end
if exist("myfile") then
print("hi, file exists")
else
print("bye, file does not exist")
end
Lua 5.1:
function file_exists(name)
local f = io.open(name, "r")
return f ~= nil and io.close(f)
end