2016-09-26 4 views
1

Доброго вечер,Открыть файл без имени файла Lua Skript

В настоящее время я работаю над программой, которая принимает информацию из файла в базу данных, для целей тестирования я использовал, чтобы открыть Testfiles классического способа через IO:

function reader (file, delimeter) 
    local f = io.open(file) 
    for line in f:lines() do 
     lines[count] = splitty(line, delimeter) 
     count = count + 1; 
    end 
end 

(эта часть также containes первой части разветвителя)

Но в реальной среде, программа базы данных imediatly перемещает файл в другом каталоге с изменением названия, например этого:

$30$15$2016$09$26$13$27$24$444Z$.Pal.INV.csv 

Теперь я знаю каталог, но я не могу предсказать имя, поэтому я хотел знать, есть ли способ открыть файлы, не зная их имени. (и удалить их после прочтения их)

Я имел идеи использовать модифицированную ссылку:

local inputFile = "D:\\Directory\\(*all)" 

но это не удалось.

Другая доступная информация: Система до сих пор запланирована только на ПК с ОС Windows. В каталоге всегда будет только один файл, который должен быть готов, никаких других файлов.

+0

Я не понимаю пункт системы. 1. Почему имя не может быть статическим и известным. 2. Какой смысл иметь каталог с одним файлом? – warspyking

+0

Ядром всей этой проблемы является Datastudio, которая должна управлять целыми данными, считывать их из файлов, хранить в базах данных до предоставления запрошенных данных процессам, которые им нужны, к сожалению, это не так. в любом месте рядом с готовым или интеллектуальным дизайном, например, отсутствует возможность настроить шаблон чтения (понимание даты, имя объекта usw.), и я должен исправить это с помощью обходного пути. Что делает база данных, переименовывает файл, который он получает в каталоге запуска, когда мне мой инструмент должен его прочитать, поэтому мне нужно прочитать переименованный. – Etaila

ответ

1
-- directory name and file name should consist of ASCII-7-bit characters only 
local dir = [[C:\Temp\New Folder]] 
local file = io.popen('dir /b/s/a-d "'..dir..'" 2>nul:'):read"*a":match"%C+" 
if not file then 
    error"No files in this directory" 
end 
-- print the file name of first file in the directory 
print(file) --> C:\Temp\New Folder\New Text Document.txt 
+0

Все еще предоставляя неинформативные, короткие ответы, которые я вижу xD – warspyking

+0

@warspyking - Неинформативный ответ? В самом деле? Qui habet aures audiendi audiat. –

+0

Я имею в виду отсутствие объяснений, чтобы помочь им понять, как это работает. – warspyking

2

Вы можете использовать итератор lfs.dir из LuaFileSystem для перебора содержимого каталога. Небольшой пример:

local lfs = require("lfs") 

local path = "D:\\Directory\\" -- Your directory path goes here. 
for filename in lfs.dir(path) do 
    print(filename) -- Work with filename, i will just print it 
end 

Если вы сохранить запись файлов вы сможете узнать, какой из них является новым. Если это только один файл, то это будет проще, вы можете просто проверить расширение с помощью функции string. Из того, что я помню, итератор включает .. и .. lfs documentation can be found here.

+0

Очень хороший и эффективный способ, попробовал его в ZeroBraneStudio, но, к сожалению, у компилятора в фактической Datastudio не было библиотеки LuaFileSystem, поэтому мне пришлось использовать другую, но если включить библиотеку, это вариант, который определенно лучше. – Etaila