0

lua と io ライブラリについて 1 つ質問があります。

私はファイルサイズを取得するためのこの単純な関数を持っています:

function checkisoLIMG(file)
    local iso = assert(io.open(file, "rb"));
    if (iso) then
        local size = iso:seek("end");
        iso:close();
        return size;
    else
        return "error";
    end
end

大きなファイル (約 3GB または 4GB) のサイズを取得しようとすると、関数は nil または -1 を返しますが、小さなファイルでは問題なく動作します。誰かがこれを修正する方法を知っていますか? またはファイルサイズを取得するスクリプト。

プログラムが問題なくファイルを開き、2147483647 よりも低い位置 (2GB 未満の 1 バイト) をシークできるため、問題は io.seek ですが、2GB 以上の位置を見ようとすると失敗します。

前もって感謝します

4

2 に答える 2

3

LuaのバージョンやOSによって異なります。

-- Program
print(io.open[[D:\_Best Films\The Grudge 1,2\Proklyatie.2004.x264.BDRip.720p.mkv]]:seek'end')

-- Output on Lua 5.2.1 / Windows
5706609998

-- Output on Lua 5.1.4 / Windows
nil     Invalid argument        22

この問題に対する純粋な Lua の回避策はありません。

于 2013-04-21T18:39:23.820 に答える
0

コードの特定のエラーの原因はわかりませんが、ファイルのサイズを知りたい場合は、LuaFilesystemライブラリを使用します。これは基本的な Lua 標準ライブラリの一部ではありませんが、私が知っている最も一般的に使用されているファイルシステム ライブラリです。LuaForWindows ディストリビューションにバンドルされており、Luarocks で簡単にインストールできます。

local lfs = require 'lfs'

function getFileSize(filename)
   local attrs = lfs.attributes(filename)
   if not attrs then error("File not found") end
   return attrs.size
end
于 2013-04-21T17:51:20.070 に答える