C++ cli 读取具有相似名称的多个文件C++

C++ cli 读取具有相似名称的多个文件C++,c++-cli,fstream,C++ Cli,Fstream,我正在从当前目录中读取文件 ifstream myfile; myfile.open("version1.1.hex"); 现在出现了这样一种情况:如果用户更新了版本,那么当前目录中将有版本1.2.hex或版本1.3.hex..以此类推,但每次只会出现一个文件。我现在想写一个代码,它将满足未来读取不同文件的需要 我正在用C++/CLI编写此代码。此代码将在目录中查找并获取第一个文件,然后退出 警告:这仅适用于linux 由于文件列表有点依赖于环境,我不确定这是否对您有帮助, 但这里有一个例子,

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

ifstream myfile;
myfile.open("version1.1.hex");
现在出现了这样一种情况:如果用户更新了版本,那么当前目录中将有版本1.2.hex或版本1.3.hex..以此类推,但每次只会出现一个文件。我现在想写一个代码,它将满足未来读取不同文件的需要


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

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

警告:这仅适用于linux


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

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

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

在C++/CLI中,您应该为此使用.net framework库。例如,您可以使用


阅读此目录的内容并查找文件名部分以version开头的文件名是否介意使用boost?@user1903439“aha any example?”查找:@Nasser。不,我不介意。u plz能举个例子吗?Xsh应该是一个句柄值。在中编辑。非常感谢您的回复。我刚刚在VisualStudio中测试了这段代码,但不起作用。你测试过了吗?我刚刚测试过,你需要将第一行改为string filesearch key=version*如果不使用完整路径,我的代码库前缀是某个路径谢谢!它起作用了。还有一件事。我想显示在标签上找到的文件名,我该怎么做。我试图去` label.Text=fd.cFileName;但这不起作用。对此我有什么想法?我必须在windows上使用它。你有windows的例子吗。坦克斯
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);
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;
}