我正在从当前目录中读取文件
ifstream myfile;
myfile.open("version1.1.hex");
现在出现了一种情况,如果用户更新版本,那么当前目录中将会出现 version1.2.hex 或 version1.3.hex ..so ,但一次只能存在一个文件。我现在想编写一个代码,以满足未来阅读不同文件的需要。
我正在用C ++ / CLI编写这段代码。
答案 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;
}