如何在Lua中检查文件是否存在 - 当你没有完整的文件名?

我遇到了一个情况,我不知道文件的完整名称,但需要搜索它以查看是否存在。我不知道文件名的部分是名称末尾的序列号。

例如,文件名看起来像这样:

myfile.1234567890.12.xff

“.12”是我不知道的部分。然而,我只需要知道是否存在以“myfile.1234567890”开头并以“.xff”结尾的文件。

我该如何在lua中实现这一点?

谢谢。

点赞
用户1778421
用户1778421

你可以在这个链接中找到 Lua 中 glob 函数的实现。但是你也可以遍历文件夹中的所有文件并将它们与你的模式进行比对。你可以使用 LuaFileSystem lfs.dir() 来获取文件列表。

2013-03-14 19:49:24
用户1847592
用户1847592

Windows版本

没有外部库。

local function recursive_search(path, OS_filemask, filename_pattern, search_for_dirs, only_top_level)
   path = path:gsub('/', '\\'):gsub('\\*$', '\\', 1)
   OS_filemask = OS_filemask or '*.*'
   filename_pattern = filename_pattern or '.*'
   local arr = {}
   local pipe = io.popen((search_for_dirs and 'dir /b/ad "' or 'dir /b/a-d "')..path..OS_filemask..'" 2> nul')
   for f in pipe:lines() do
      if f:lower():match('^'..filename_pattern..'$') then
         table.insert(arr, path..f)
      end
   end
   pipe:close()
   if not only_top_level then
      for _, path in ipairs(recursive_search(path, nil, nil, true, true)) do
         for _, f in ipairs(recursive_search(path, OS_filemask, filename_pattern, search_for_dirs)) do
            table.insert(arr, f)
         end
      end
   end
   return arr
end

-- 在C:\ Games中查找所有以数字命名的JPEG图片
-- OS文件掩码不能很好地过滤它,使用Lua模式限制搜索条件
for _, f in ipairs(recursive_search('C:\\ Games''*.jp*g''%d+%.jpe?g')) do
   print(f)
end

-- 在 C:\WINDOWS 中查找带有32名称的所有文件夹
-- 这里的OS文件掩码已足够
for _, f in ipairs(recursive_search('C:\\ WINDOWS''*32*'niltrue)) do
   print(f)
end

-- myfile.1234567890.12.xff
for _, f in ipairs(recursive_search('C:\\', 'myfile.1234567890.*.xff', 'myfile%.1234567890%.%d+%.xff')) do
   print(f)
end
2013-03-14 22:43:59