2014-06-10 3 views
1

나는 루아의 기본 프로젝트에서 일하고있다. 나는 (here으로 정의 된) IO API를 사용하여 파일에서 데이터를 가져 오려고했지만 파일을 열어 핸들을 주면 함수 테이블을 반환하지 않는 것 같습니다.루아 함수 (IO API) 테이블을 생성하지

는 코드 (의 잘못된 비트)

: 그것은

local unread = fs.list("email/"..from.."/") 
local send = "" 
for _,file in ipairs(unread) do 
    local handle = io.open(file,"r") 
    local text = handle:read("*a") 
    send = send .. text .. "\n" 
    handle.close() 
    fs.delete(file) 
end 

당신이 첫 번째 줄에 볼 수있는 fs는 IO의 API, 나의 작업과 완벽하게 오류없이 라운드 전문 파일 시스템 래퍼, 아니다, 그래서 문제. 그러나 파일 (handle:read())을 읽으려고하면 "nil을 시도합니다."라는 오류가 발생합니다. 추적하면 handle 자체가 nil 인 것으로 나타났습니다. 어떤 아이디어?

+2

'print (file)'을 사용하여 파일 이름이나 파일의 전체 경로인지 확인하십시오. – hjpotter92

+0

@hjpotter92는'file'이 유효한 경로인지를 알려주므로'handle'은 파일을 읽을 수있는 권한이 있다고 가정 할 때 nil이 아니어야합니다. 경로가 부정확하거나 불완전하다면 (예를 들어'fs.list' 호출에서 주어진 경로와 관련이있다) 파일을 열려고 시도하기 전에'fs' 라이브러리를 수정하거나 올바른 절대 경로 나 상대 경로를 만들어야합니다. –

+0

@ hjpotter92 그 아이디어가 마음에 들었습니다. 나는 내가 옳은 길을 가졌다 고 생각했지만 그것이 잘못되었을 때 그것을 망칠 수 있다는 것을 깨닫지 못했습니다. – ArtOfCode

답변

3

io.open은 성공시 파일 핸들을 반환하고 실패하면 오류 메시지와 함께 nil (Lua 참조 설명서에 따라)을 반환합니다. 이 파일을 읽을 수있는 권한이없는 경우, 또는 다른 문제가있을 경우 정말 당신이

handle, err = io.open(file, 'r') 
if handle == nil then 
    print('could not open file:', file, ':', err) 
    return 
end 
local text = handle:read("*a") 
... 

는 오류 메시지가 당신을 말할 것이다 사용해야 함을 의미한다.

관련 문제