【问题标题】:Trying to loop through Directory to list all the files using lua尝试遍历目录以使用 lua 列出所有文件
【发布时间】:2018-08-29 19:23:56
【问题描述】:

我是 lua 的新手,试图理解和拼凑并寻求帮助。 我已经浏览了有关 lua 文件循环的现有文章,但无法获得所需的输出。

问题 - 我有一个包含文件的文件夹,文件夹路径 - "D:\Test_Files\Outbound\Client\final" 文件夹中带有扩展名的文件 - .txt

尝试:

  1. 获取文件夹(在本例中为“final”文件夹)中的文件数。
  2. 读取每个文件,构建一个类似这样的循环:

    list = {}
    for i=0,(#Totalfilecount) do 
    local fr = io.open('D:\Test_Files\Outbound\Client\final\'..filename.,'rb') 
    local f = fr.read('*.txt')
    
    Customfunction(f) -- Passing file content to customfunction to apply business logic.  
    end
    

问题:

  1. 如何从目录中获取文件数?
  2. 如何读取目录以检查是否存在带有“*.txt”的文件?
  3. 如何使用表列表存储每个文件名并循环读取?
  4. 如何通过循环读取每个文件并将值传递给函数“Customfunction(f)”?

代码应在 Windows 上运行。请在纯 lua 中分享建议,不要使用诸如“lfs”之类的外部文件系统函数,因为我们不喜欢导入外部函数。

任何建议/帮助将不胜感激!

【问题讨论】:

  • 您好,您能否编辑问题,使代码块中只有代码而不是一般文本?
  • 您熟悉 www.google.com 或类似网站吗? lua-users.org/wiki/DirTreeIterator加油

标签: file lua path


【解决方案1】:

如果没有 Lua 的扩展,你不能(至少不应该)这样做。为此,您必须下载LuaFileSystem 库。你可以使用 LuaRocks 来做到这一点:

$ luarocks install luafilesystem

像这样使用库:

require "lfs"

function dirtree(dir)
    assert(dir and dir ~= "", "Please pass directory parameter")
    if string.sub(dir, -1) == "/" then
        dir=string.sub(dir, 1, -2)
    end

    local function yieldtree(dir)
        for entry in lfs.dir(dir) do
            if entry ~= "." and entry ~= ".." then
                entry=dir.."/"..entry
                local attr=lfs.attributes(entry)
                coroutine.yield(entry,attr)
                if attr.mode == "directory" then
                    yieldtree(entry)
                end
            end
        end
    end

    return coroutine.wrap(function() yieldtree(dir) end)
end

以上代码的使用示例:

for filename, attr in dirtree("D:\Test_Files\Outbound\Client\final") do
    print(attr.mode, filename)
end 

您必须检查扩展名是否等于 txt。要读取文件扩展名,请使用这个 sn-p:

function GetFileExtension(path)
    return path:match("^.+(%..+)$")
end

因此,要回答您的问题,您可以通过计算在 ditree.xml 中返回的数组中的元素来获取目录中的文件数量。要回答第二个问题,只需使用帖子中的代码。您想要的表由 ditree() 返回,但您可能只想从中提取 .txt 文件。要读取文件,只需检查其他 SO 答案。你有给定的名字(在数组中),所以使用它。

编辑:您可以解析 dirls 命令的结果以获取目录列表,但您不应该。通过这种方式,您无需安装任何库,您的代码将严重依赖操作系统

将库添加到您的代码中还不错。黑客攻击更糟糕。

(不确定文件扩展名提取功能是否有效。我没有在这篇文章中使用脏代码,它属于 David Kastrup)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多