int main(int argc, char* argv[])
{
blah blah blah
if (newDataAvailable) {
std::ofstream outfile;
outfile.open("C:/Users/admin/Documents/MATLAB/afile2.txt", std::ios::app);
outfile << "Blah blah blah" << "\n";
outfile.close();
这个代码几乎从传感器获取数据并将其输出到文本文件。 'if'语句将每10ms循环一次。
我需要做的是在'if'循环之前,我需要创建一个唯一的文件名,然后一旦代码到达if循环,就可以outfile.open("C:.../**FILENUMBER X.txt**",std::ios::app);
换句话说,每次运行代码时,我都需要此代码来创建新的文件名。我能想到的唯一两种方法是使用某些东西来生成随机数或使用某些东西来生成日期/时间。 (但请注意,当if循环正在运行时,它需要创建/打开相同的文本文件。只有在代码停止并再次运行时才会创建新的文本文件名称)
我对c ++编程几乎没有任何了解(我只需要编辑我预先编写的代码),而我研究过的所有解决方案对我来说都没有多大意义所以我认为id来问这里
答案 0 :(得分:0)
基于第一个建议:
int main(int argc, char* argv[])
{
//blah blah blah
bool started = false;
std::ofstream outfile;
while(true) {//loop, could be while or for or whatever
sleep(10); //you said it runs every 10ms
if(!started){
int fileno = 1;
bool success = false;
while(success &&fileno < MAX_INT) {
ifstream ifs("C:/Users/admin/Documents/MATLAB/afile" + fileno + ".txt", std::ios::read);// attempt read file to check if it exists
success = ifs.good();
ifs.close();
fileno++;//increase by one to get a new file name
}
outfile.open("C:/Users/admin/Documents/MATLAB/afile" + fileno + ".txt", std::ios::app);
started = true;
}
if (newDataAvailable) {
outfile << "Blah blah blah" << "\n";
}
}
outfile.close(); //moved out of loop so that it is not closed
return 0;
}
答案 1 :(得分:0)
您可以将文件名与表示序列或文件编号的修补程序一起使用。例如,您将第一个文件命名为“yourFileName1”,将第二个文件命名为“yourFileName2”等。您需要将最后一个文件的序列存储在文件中。当您第一次启动程序时,将文件的序列设置为1.下次运行程序时,将读取序列文件“sequenceFile.txt”中的最后一个序列并将其递增1.在终止之前程序,您应该将最后一个序列存储回序列文件中。
#include <fstream>
#include <string>
using namespace std;
int main()
{
unsigned int fileSeq;
ifstream seqFileIn;
ofstream seqFileOut;
seqFileIn.open("sequeceFile.txt", ios::in);
// If "sequenceFile.txt" exists, read the last sequence from it and increment it by 1.
if (seqFileIn.is_open())
{
seqFileIn >> fileSeq;
fileSeq++;
}
else
fileSeq = 1; // if it does not exist, start from sequence 1.
// Assume newDataAvailable = true
bool newDataAvailable = true;
if (newDataAvailable) {
ofstream afile;
string fileName = "afile" + to_string(fileSeq) + ".txt";
cout << "File Name is " << fileName << endl;
afile.open(fileName, ios::app);
afile << "Blah blah blah! File sequence is " << fileSeq << "\n";
afile.close();
}
// Before you exit your program, do not forget to store the last file sequence in "sequeceFile.txt".
seqFileOut.open("sequeceFile.txt", ios::out);
seqFileOut << fileSeq;
return 0;
}
答案 2 :(得分:-1)
您可以使用日期作为文件名。获取当前日期和时钟然后添加您的文件名(将afile2替换为日期)。我认为有很多不同的方式。