2017-03-03 105 views
-1

通常当文件名是“example.txt”时,我可以使用以下代码从文件读取。如何读取具有前缀和时间戳的文件作为C++中的文件名称

string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (getline (myfile,line)) 
    { 
     cout << line << '\n'; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

但我怎么可以使用相同的程序来读取一个文件,如果文件名是example_201703031140.txt或example_201703031142.txt。 (让我们只说这个文件是在与该前缀位置的唯一文件。换句话说,位置可以有example_201703031140.txt OR example_201703031142.txt,而不是两者)

要澄清的问题较多,如何能我写的程序可以读取动态更改文件名? 例如,想象一下,我必须写入名为example_timestamp的文件,并从单独的模块中读取该文件(该文件不能访问完整的文件名,但知道它有一个前缀“example”,后跟一个时间戳)

更新:您不知道时间戳是什么,您只知道它是时间戳。

+0

XY选项。如果文件写入间隔足够远以至于它们不会重叠读取,则始终写入相同的名称。然后读取常用名称,并在完成时使用时间戳重命名文件。 – user4581301

+0

否则会得到一个目录列表(os特定的代码或类似于Boost在接下来的几个月内需要的直到C++ 17下载)并且从列表中找到想要的文件。 – user4581301

+0

另一个X-Y选项:在两个进程之间打开IPC连接(如套接字或管道),让作者告诉读者何时有文件可用以及名称是什么。 – user4581301

回答

1

我猜你会喜欢这样的事情:

DIR* dirp = opendir("the dir name"); 
while(struct dirent* e = readdir(dirp)){ 
    if e->d_name matches the pattern you wanted{ 
      do whatever you want with this file. 
    } 
} 
-2

首先,你需要创建的文件名前缀或后缀,例如创建日期时间格式:

char buffer[128]; 
time(&rawtime); 
timeinfo = localtime(&rawtime); 
strftime(buffer, 80, format.c_str(), timeinfo); 
out << buffer; 

之后,你建立的文件名来验证和使用它。

在链接链接你展示如何创建一个库创建具有动态名称日志和重用他们:

https://github.com/jorgemedra/APILogCpp/blob/master/APILogCpp/UIPILog/LogManager.cpp

相关问题