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