Вот пример кода, который работал для меня как на стороне клиента, так и на стороне сервера. Он использует пространства имен .NET для получения списка файлов в заданном пути к папке для заданного шаблона.
Вы можете изменить это, чтобы создать собственную версию FindFirstFile на стороне сервера.
X ++ Код
static container findMatchingFiles(
str _folderPath
, str _filePattern = '*.*')
{
System.IO.DirectoryInfo directory;
System.IO.FileInfo[] files;
System.IO.FileInfo file;
InteropPermission permission;
str fileName;
counter filesCount;
counter loop;
container mathchingFiles;
;
permission = new InteropPermission(InteropKind::ClrInterop);
permission.assert();
directory = new System.IO.DirectoryInfo(_folderPath);
files = directory.GetFiles(_filePattern);
filesCount = files.get_Length();
for (loop = 0; loop < filesCount; loop++)
{
file = files.GetValue(loop);
fileName = file.get_FullName();
mathchingFiles = conins(mathchingFiles, conlen(mathchingFiles) + 1, fileName);
}
CodeAccessPermission::revertAssert();
return mathchingFiles;
}
Тестовое задание
Чтобы проверить приведенный выше код, я создал следующие файлы примеров по пути C:\temp\Files\
Я поместил вышеупомянутый метод в учебный класс с именем Tutorial_WinApiServer . Затем создал задание с именем fetchFiles
со следующим кодом.
static void fetchFiles(Args _args)
{
container files;
counter loop;
str fileName;
;
files = Tutorial_WinApiServer::findMatchingFiles(@'C:\temp\Files', '*.txt');
for (loop = 1; loop <= conlen(files); loop++)
{
fileName = conpeek(files, loop);
info(fileName);
}
}
Выполнение задания дало следующий вывод.
После изменения шаблона файла на F *. * задание выдает следующий вывод.
Надеюсь, это поможет.