0

ファイルの完全な名前がわからない状況がありますが、ファイルが存在するかどうかを検索する必要があります。私が知らないファイル名の部分は、名前の最後のシーケンス番号です。たとえば、ファイル名は次のようになります。

myfile.1234567890.12.xff

「.12」の部分は私が知らないものです。ただし、「myfile.1234567890」で始まり「.xff」で終わるファイルが存在するかどうかを知る必要があります。

luaでこれをどのように達成しますか? ありがとう。

4

2 に答える 2

2

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

-- Find all number-named JPEG picures in C:\Games
-- OS filemask can't filter it properly, use Lua pattern to restrict search conditions
for _, f in ipairs(recursive_search('C:\\Games', '*.jp*g', '%d+%.jpe?g')) do
   print(f)
end

-- Find all folders in C:\WINDOWS with 32 in its name
-- OS filemask is enough here
for _, f in ipairs(recursive_search('C:\\WINDOWS', '*32*', nil, true)) 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-14T22:43:59.810 に答える
0

Lua での glob 関数の実装は、このリンクにあります。ただし、フォルダー内のすべてのファイルのリストを反復処理して、パターンと照合することができます。LuaFileSystem lfs.dir()を使用してリストを取得できます。

于 2013-03-14T19:49:24.693 に答える