Search code examples
c++-clifstream

read multiple files with quite similar names c++


I am reading a file from current directory

ifstream myfile;
myfile.open("version1.1.hex");

Now a situation is arising that if user updates version then there will be version1.2.hex or version1.3.hex ..so on in the current directory, but one file at a time will be present. I want to write a code now which will cater this future need of reading different file.

I'm writing this code in C++/CLI.


Solution

  • Since file listings are a bit environment-dependant I am not sure if this is helpful to you, but here is an example how to achieve your goal under the mircosoft regime.

    What is needed is the FindFirstFile / FindNextFile calls which query all files matching the fileSearchKey. Then you can use the cFileName part of WIN32_FIND_DATAA as parameter to your open command

    string fileSearchKey = "version*";
    
    WIN32_FIND_DATAA fd;
    
    bool bFirstRun = true;
    bool bFinishedRun = false;
    HANDLE h = INVALID_HANDLE_VALUE;
    while (!bFinishedRun)
    {
        if (bFirstRun)
        {
            h = FindFirstFileA(fileSearchKey.c_str(), &fd); 
            bFirstRun = false;
        } else
        {
            if (FindNextFileA(h, &fd) != FALSE) 
            {
                // Abort with error because it has more than one file or decide for the most recent version
            } else
            {
                bFinishedRun = true;
            }
        }
    
    }
    // Load file
    ifstream myfile;
    myfile.open(fd.cFileName);