读取具有非常相似名称的多个文件c ++

时间:2014-07-02 09:20:18

标签: c++-cli fstream

我正在从当前目录中读取文件

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

现在出现了一种情况,如果用户更新版本,那么当前目录中将会出现 version1.2.hex version1.3.hex ..so ,但一次只能存在一个文件。我现在想编写一个代码,以满足未来阅读不同文件的需要。

我正在用C ++ / CLI编写这段代码。

3 个答案:

答案 0 :(得分:2)

由于文件列表与环境有关,我不确定这对您是否有帮助, 但这里有一个如何在mircosoft制度下实现目标的例子。

FindFirstFile / FindNextFile调用需要查询与fileSearchKey匹配的所有文件。然后,您可以使用WIN32_FIND_DATAA的cFileName部分作为打开命令的参数

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

答案 1 :(得分:1)

此代码将在目录中查找并获取第一个文件,然后退出。

警告 :这只适用于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;

}

答案 2 :(得分:1)

在C ++ / CLI中,您应该使用.net框架库。例如,您可以使用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;
}