File 正在尝试循环目录以使用lua列出所有文件

File 正在尝试循环目录以使用lua列出所有文件,file,lua,path,File,Lua,Path,我对lua来说是个新手,我试图去理解和拼凑,并寻求帮助。 我已经阅读了有关lua文件循环的现有文章,但无法获得所需的输出 问题-我有一个包含文件的文件夹,文件夹路径-“D:\Test\u files\Outbound\Client\final” 文件夹中的文件扩展名为-.txt 试图: 获取文件夹中的文件数(在本例中为“final”文件夹) 读取每个文件,构建类似以下内容的循环: list = {} for i=0,(#Totalfilecount) do local fr = io.open

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

问题-我有一个包含文件的文件夹,文件夹路径-
“D:\Test\u files\Outbound\Client\final”
文件夹中的文件扩展名为-
.txt

试图:

  • 获取文件夹中的文件数(在本例中为“final”文件夹)
  • 读取每个文件,构建类似以下内容的循环:

    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
    
  • 问题:

  • 如何从目录中获取文件计数
  • 如何读取目录以检查带有“*.txt”的文件是否存在
  • 如何使用表列表存储每个文件名并读取循环
  • 如何通过循环读取每个文件并将值传递给函数“Customfunction(f)”
  • 代码应在windows上运行。请在纯lua中分享建议,不要使用外部文件系统函数,如“lfs”,因为我们不喜欢导入外部函数

    如有任何建议/帮助,将不胜感激

    如果没有对Lua的扩展,就不能(至少不应该)这样做。要实现这一点,您必须下载库。您可以使用Luarock执行此操作:

    $ 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。要读取文件扩展名,请使用以下代码段:

    function GetFileExtension(path)
        return path:match("^.+(%..+)$")
    end
    
    所以,为了回答您的问题,只需计算dirtree中返回的数组中的元素,就可以得到目录中的文件数量。要回答第二个问题,只需使用帖子中的代码。所需的表由dirtree()返回,但您可能只想从中提取.txt文件。要阅读文件,只需检查其他答案。您已经有了给定的名称(在数组中),所以请使用它

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

    向代码中添加库并不是那么糟糕。黑客攻击情况更糟


    (不确定文件扩展名提取功能是否正常工作。我没有在本文中使用dirtree代码,它属于David Kastrup)

    Hi,你能编辑这个问题,使其只包含代码块而不包含一般文本吗?你熟悉www.google.com或类似网站吗?来吧