2013-04-21 2 views
0

lua 및 io 라이브러리에 관한 한 가지 질문이 있습니다.큰 파일에서 찾기 기능에 오류가 발생했습니다.

난 파일 크기를 얻을이 간단한 기능을했습니다 :

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 

내가 함수 반환 전무는 -1 (3기가바이트 또는 약 4GB) 큰 파일의 크기를 얻기 위해 노력하지만, 작은, 파일이 잘 작동합니다. 누군가 이것을 고치는 법을 알고 있습니까? 또는 스크립트를 사용하여 파일 크기를 가져올 수 있습니다.

프로그램이 문제없이 파일을 열어서 2147483647 (1 바이트 미만 2GB)보다 낮은 위치를 찾을 수 있기 때문에 문제는 io.seek입니다.하지만 2GB 이상인 위치를 보려고 할 때 실패합니다.

사전

답변

0

난 당신의 코드에서 특정 오류 원인을 알 수없는 감사하지만 파일의 크기를 알고 싶어한다면 나는 LuaFilesystem 라이브러리를 사용합니다. 기본 루아 표준 라이브러리가 아니라 가장 많이 사용되는 파일 시스템 라이브러리입니다. 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 
+0

답장을 보내 주셔서 감사합니다. 그러나 스크립트 언어로 lua를 사용하는 프로그램을 사용하고 있으며 제 3 자 라이브러리를 설치할 수 없습니다. –

+1

@ DanielCarrascoMarín : 그러면 아마도 플랫폼 간 라이브러리 대신 시스템 특정 솔루션을 사용할 수 있습니다. os.execute 명령은 다른 프로그램을 실행하는 데 사용할 수 있으며 시스템 구성 방법에 따라 원하는 기능을 수행 할 수있는 기능이있을 수 있습니다. – hugomg

+0

내가 사용하는 프로그램에서 lfs를 사용하는 방법을 찾았지만, 파일의 마지막 16KB를 읽고 싶습니다. 그리고 io.open없이 찾아서 탐색하는 방법을 모르겠습니다. 나는 lfs로 그것을하는 방법을 보지 못했다. –

3

루아 버전 및 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 

이 문제에 대한 순수한 루아 해결책이 없습니다.

+0

프로그램은 Lua 5.1.4 엔진을 사용합니다. 아마도 그게 문제입니다 ... 나는이 일을 할 dll을 만들려고 노력할 것입니다. –

관련 문제