【问题标题】:Delete all files except in array in NodeMCU Lua删除NodeMCU Lua中除数组之外的所有文件
【发布时间】:2020-05-05 12:59:26
【问题描述】:

删除除数组中的文件外的所有文件 files = {"init.lua", "client.lua", "config.htm", "server.lua", "update.lua"}

【问题讨论】:

    标签: arrays file lua nodemcu


    【解决方案1】:

    the documentation 中所述,您可以使用file.list() 获取文件系统上所有文件的列表。

    这会返回一个地图file name => file size;所以文件名是表键,你可以使用它。

    请记住:

    • Lua 中的表索引速度可以接受
    • 可以通过将值设置为nil 来删除键值对

    所以我们可以这样做:

    local whitelist = {"init.lua", "client.lua", "config.htm", "server.lua", "update.lua"}
    local files = file.list()
    
    -- Remove files found in the whitelist
    for _, filename in ipairs(whitelist) do
       files[filename] = nil
    end
    
    -- Delete the remaining files
    for filename in pairs(files) do
       file.remove(filename)
    end
    

    【讨论】:

      【解决方案2】:

      首先,我们可以创建 3 个类似数组的表:一个用于受保护的文件(您提供的那个),另一个用于列出目录中的所有文件,最后一个用于选择我们将删除的文件。

      local protected = {"init.lua", "client.lua", "config.htm", "server.lua", "update.lua"}
      local found = {}
      local delete = {}
      

      接下来,我们将收集目录内容:

      for name in io.popen([[dir "" /b]]):lines() do
         table.insert(found, name)
      end
      

      值得注意的是它也会获取文件夹,但在这里没关系,因为我们无论如何都无法删除这些。

      现在,通过一个简单的函数和一个 for 循环,我们将获得从 founddelete 的值,protected 中的值除外:

      local function contains(t, v)
          for index, value in ipairs(t) do
              if value == v then
                  return true
              end
          end
          return false
      end
      
      for _, value in ipairs(found) do
         if not contains(protected, value) then
            table.insert(delete, value)
         end
      end
      

      现在我们删除delete中的文件

      for _, filename in ipairs(delete) do
         print("Deleting "..filename.." (unless it is a folder)")
         os.remove(filename) -- this function is simply unable to delete folders
      end
      

      就是这样。我必须承认,我在 Windows 上运行它,所以我使用了 dir 命令。在你想运行它的地方可能需要将它更改为ls(从io.popen([[dir "" /b]]):lines()io.popen([[ls "" /b]]):lines())。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 2023-03-28
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多