2009-04-02 9 views
2

제목이 말하는 것과 같습니다. 디렉토리의 모든 파일을 어떻게로드합니까? 나는 C++과 lua 모두에 관심이있다.디렉토리에서 모든 파일을로드하는 방법은 무엇입니까?

편집 : Windows의 경우 실제 작업 코드와 특히 lua에 대해 기뻐할 것입니다. boost :: filesystem for C++로 할 수 있습니다.

+0

"로드"란 무엇입니까? – bayda

+0

로드, 실행, 찾기. 특히 lua에서는 dir의 모든 것에 대해 "dofile (s)"명령을 사용하십시오 – Jonas

답변

8

루아는 모듈 Lua Filesystem을 원합니다.

Nick이 관찰 한 것처럼 개별 파일과 달리 파일 시스템 자체에 액세스하는 것은 C 및 C++ 표준 범위를 벗어납니다. Lua 자체는 표준 C로 작성된 (C 모듈에 대한 require() 구현에 사용 된 동적 로더를 제외하고) 핵심 언어는 많은 파일 시스템 기능이 부족합니다.

그러나 Lua 코어를 확장하기는 쉽지만 (거의) 파일 시스템이있는 플랫폼은 DLL이나 공유 라이브러리를 지원하기 때문에 쉽게 확장 할 수 있습니다. 루아 파일 시스템은 디렉토리 반복, 파일 속성 발견 등에 대한 지원을 추가하는 이식 가능한 라이브러리입니다. LFS와

, 본질적 루아에서 DIR의 기능의 일부입니다 모방 한 간단 : 루아의 복사본이 온 경우

E:...>t-lfs.lua 
.  directory  2009-04-02 13:23  0 
..  directory  2009-04-02 13:18  0 
foo.txt file 2009-02-23 01:56  0 
t-lfs.lua  file 2009-04-02 13:18  241 

E:...> 

:과 같은 출력을 생성

require "lfs" 
dot = arg[1] or "." 
for name in lfs.dir(dot) do 
    local fqn = dot.."/"..name 
    local attr = lfs.attributes(fqn) 
    print(name, attr.mode, os.date("%Y-%m-%d %H:%M",attr.modification), attr.size) 
end 

Lua for Windows, 그러면 lfs가 이미 설치되어 있고 위의 샘플은 기본적으로 작동합니다.

편집 : 덧붙여 말하면, Lua 솔루션은 또한 합리적인 C 또는 C++ 솔루션 일 수 있습니다. 루아 코어는 전혀 크지 않고 동적 인 가비지 컬 랭어를 제공하며 호스팅 애플리케이션이나 확장 모듈로서 C와 상호 작용하기 쉽다. C 응용 프로그램에서 lfs를 사용하려면 Lua DLL에 연결하고 Lua 상태를 초기화 한 다음 luaL_dostring()을 통해 require"lfs"을 실행하도록 상태를 얻거나 C API를 사용하여 전역 테이블에서 require() 함수를 검색하려면 문자열 "lfs"을 호출하고 테이블을 루아 스택 맨 위에 두는 lua_pcall(L,1,1,0)과 같은 식으로 루아 함수를 호출하십시오.

이 방법은 이미 임베디드 스크립팅 언어가 필요하고 Lua가 요구 사항을 충족시키는 경우 가장 적합 할 것입니다.

2

디렉토리의 파일 나열은 플랫폼에 의해 정의되므로 플랫폼 종속 라이브러리를 사용해야합니다. 이것은 C++과 Lua (ansi c 기능 만 구현)에 해당합니다.

1
require "lfs" 

function loadall(dir) 
    for file in lfs.dir(dir) do 
    if string.find(file, ".lua$") then 
     dofile(dir .. "/".. file)  
    end 
    end 
end 
+0

여기서'require '대신'dofile'을 사용해야합니다 : 모듈이 아닌 파일을로드하고 있습니다. – lhf

+0

감사합니다. @lhf, 코드를 수정했습니다. –

관련 문제