read multiple files with quite similar names c++

梦想的初衷 提交于 2019-12-10 12:25:49

问题


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.


回答1:


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



回答2:


This code will look in the directory and take the first file, then quit.

WARNING : this will work only on linux

#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <cstring>


#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>

using namespace std;

int main ()
{
    char n[20];

    unsigned char isFolder = 0x4;
     unsigned char isFile = 0x8;
    DIR *dir;
    struct dirent *ent;
    dir = opendir ("./");
        if (dir != NULL) {

          /* print all the files and directories within directory */
          while ((ent = readdir (dir)) != NULL) {

            //folder sign
            if(ent->d_type != isFolder && string(ent->d_name).find("version") != string::npos)
            {
                cout <<ent->d_name <<"\n";
                  // Your code
                break;
            }


          }
          closedir (dir);


        } else {
          /* could not open directory */
          perror ("");
          return 0;
        }

        cout << "=========" << endl;

}



回答3:


In C++/CLI you should use the .net framework libraries for this. For instance you can use Directory::GetFiles.

using namespace System;
using namespace System::IO;

int main(array<System::String ^> ^args)
{
    array<String^>^dirs = Directory::GetFiles(".", "version1.*.hex");
    Collections::IEnumerator^ myEnum = dirs->GetEnumerator();
    while (myEnum->MoveNext())
    {
        Console::WriteLine(myEnum->Current);
    }
    return 0;
}


来源:https://stackoverflow.com/questions/24527343/read-multiple-files-with-quite-similar-names-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!