file - 尝试使用 lua 遍历 Directory 来列出所有文件

标签 file lua path

我是 lua 新手,试图理解并将各个部分组合在一起并寻求一些帮助。 我已经浏览了有关 lua 文件循环的现有文章,但无法获得所需的输出。

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

尝试:

  1. 获取文件夹(在本例中为“最终”文件夹)中的文件数量。
  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”),因为我们不喜欢导入外部函数。

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

最佳答案

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

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

因此,为了回答您的问题,您只需计算 dirtree 返回的数组中的元素即可获取目录中的文件数量。要回答第二个问题,只需使用帖子中的代码即可。您想要的表由 dirtree() 返回,但您可能只想从中提取 .txt 文件。要读取文件,只需检查其他 SO 答案。您已获得给定名称(在数组中),因此请使用它。

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

将库添加到代码中并不是那么糟糕。黑客攻击更糟糕。

(不确定文件扩展名提取功能是否有效。我没有制作本文中使用的目录树代码,它属于 David Kastrup)

关于file - 尝试使用 lua 遍历 Directory 来列出所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393378/

相关文章:

Python从文件中读入字符串并将其拆分为值

java - (Java) FileChooser 只允许特定文件?

检查功能是否在 C 或 Lua 中实现

lua - 通过名称访问局部变量

mysql - C编译器找不到头文件

asp.net - 如何在不手动解析字符串的情况下将 url 转换为 asp.net 中的虚拟路径?

java - 正则表达式..将字符串数组分割两次

java - 如何在其他应用程序打开或使用文件时写入文件?

colors - Lua:褪色函数

python - 如何更改 Pandas 查找自己的文件(特别是 parsers.pyx)的位置?