Try to use Winapi::findFirstFile running on server

Here is a sample code that has worked for me in both client side as well as server side. It uses .NET namespaces to fetch the list of files in a given folder path for a given pattern.
You can modify this to create your own server side version of FindFirstFile method.
X++ Code
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);

    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);


    return mathchingFiles;
Test job
To test the above code, I created the following sample files in the path C:\temp\Files\
List of files
I placed the above mentioned method in a sample class named Tutorial_WinApiServer. Then, created a job named fetchFiles with the following code.
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);
Executing the job gave the following output.
Job Output 1
After changing the file pattern to F*.*, the job produced the following output.
Job Output 2
Hope that helps.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.