79

Luaを使用してファイルが存在するかどうかを確認するにはどうすればよいですか?

4

15 に答える 15

116

試す

function file_exists(name)
   local f=io.open(name,"r")
   if f~=nil then io.close(f) return true else return false end
end

ただし、このコードは、ファイルを読み取り用に開くことができるかどうかのみをテストすることに注意してください。

于 2011-02-14T11:26:12.727 に答える
7

プレーンな Lua を使用してできる最善の方法は、LHF に従って、ファイルを読み取り用に開くことができるかどうかを確認することです。ほとんどの場合、これで十分です。しかし、さらに必要な場合は、 Lua POSIX ライブラリをロードし、posix.stat(path)が non- を返すかどうかを確認してくださいnil

于 2012-08-31T23:32:44.047 に答える
5

ここから自己引用します

私はこれらを使用します(ただし、実際にエラーをチェックします):

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

短く見えますが、時間がかかります...また、ファイルを開くのは危険です

楽しくコーディングしましょう!

于 2014-02-07T21:09:41.233 に答える
3

Windows であるという答えは、ファイルとフォルダーのみをチェックし、追加のパッケージも必要としません。trueまたはを返しますfalse

io.popen("if exist "..PathToFileOrFolder.." (echo 1)"):read'*l'=='1'

io.popen(...):read'*l' - コマンド プロンプトでコマンドを実行し、CMD stdout から結果を読み取ります

存在する場合- オブジェクトが存在するかどうかを確認する CMD コマンド

(echo 1) - コマンド プロンプトの stdout に 1 を出力します。

于 2017-08-23T15:23:44.980 に答える
0

このようなことをしてみませんか?

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
  return false
end

if exist("myfile") then
  print("hi, file exists")
else
  print("bye, file does not exist")
end
于 2019-08-19T08:47:25.640 に答える
0

ライブラリ ソリューションの場合、 または のいずれかを使用できpathsますpath

公式文書からpaths

paths.filep(パス)

パスが既存のファイルを参照しているかどうかを示すブール値を返します。

paths.dirp(パス)

パスが既存のディレクトリを参照しているかどうかを示すブール値を返します。

名前は少し奇妙ですがpaths.filep()、パスが存在し、それがファイルであるかどうかを確認するために使用できます。paths.dirp()存在するかどうか、およびディレクトリであるかどうかを確認するために使用します。とても便利。

pathよりも希望する場合は、 withをpaths使用してパスの存在を確認し、同時にその値を取得できます。ピースからパスを構築する場合に便利です。path.exists()assert()

prefix = 'some dir'

filename = assert(path.exist(path.join(prefix, 'data.csv')), 'data.csv does not exist!')

ブール値の結果を確認したいだけの場合は、 and を使用path.isdir()path.isfile()ます。その目的は名前からよく理解できます。

于 2019-04-04T08:04:47.530 に答える
-6
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')

あなたの方法をテストするのに良さそうです。:)

于 2011-02-14T12:13:56.640 に答える