2011-08-01 11 views
1

luaのフォルダ内のすべてのファイルを連結して、1つのマスターログに多数のログをコンパイルして誰かに送信しようとしています。私はifsライブラリを使ってディレクトリ内のすべてのファイルを繰り返し処理し、それをすべて読み込んでマスターファイルに追加しようとしています。Luaファイルの連結

for name in lfs.dir("logs") do 
    if(name ~= "." and name ~= "..") then 
    local path = "logs/"..name 
    print (path) 
    local file=io.open(path,"R") 
    print "2" 
    local content = io.read("*all") 
    print "3" 
    io.close(file) 

    local f=io.open("log.csv","A") 
    file:write(content) 
    io.close(f)  
    end 
end 

2つの問題があります。 ifsライブラリは "。"を返します。と ".."の前に他のファイル名[これはif文よりも無視する方がいいでしょうか?] 私がここで見つけたビットを使って:How to load all files from a directory?

重要な問題は、私のコマンドプロンプトがファイルをテストします。それはパス(良いもの)を印刷し、それが "2"になる前にクラッシュして、私は理由が分からない。ファイルが存在し、別の関数でそのファイルに行を追加することでファイルを操作できます。

ご協力いただければ幸いです。 "."をチェック回避し、".."あなたは各項目がファイルまたはディレクトリ(あるいは何か他のもの)であるかどうかを確認するためにlfs.attributesとそのmodeフィールドを使用する必要があります

答えて

2

io.readの代わりに、おそらくfile:readが必要です。これが原因でクラッシュする可能性があります。

io.openモード引数には、"r""a+"を使用することをお勧めします。

ああ、あなたは `io.read`は` file`から読まないことを指摘しなければならないcontent

+1

を書くためにf:writeを使用します。グローバルファイルハンドルから読み取ります。開いていなかったグローバルファイルハンドル。 –

+0

ありがとう、それは完璧に動作します、io.readはクラッシュでした。 – Sambardo

+0

また、 "R"対 "r"が異なって解釈され、+が "a +"のために追加するものは、私が以前に見たことがないので、興味があります。 – Sambardo