C++ 如何在每次运行程序时生成并保存新的文本文件?

C++ 如何在每次运行程序时生成并保存新的文本文件?,c++,text-files,filenames,C++,Text Files,Filenames,这段代码从传感器获取数据并将其输出到文本文件中。“if”语句将每10毫秒循环一次 我需要做的是在“if”循环之前,我需要创建一个唯一的文件名,然后一旦代码到达if循环,它将能够输出文件 换句话说,我需要这段代码在每次运行代码时创建一个新的文件名。我能想到的唯一两种方法是使用某种东西生成随机数或使用某种东西生成日期/时间。但是请注意,当if循环运行时,它需要创建/打开相同的文本文件。仅当代码停止并再次运行时,才会创建新的文本文件名 我在C++编程中几乎没有知识,我只需要编辑我所编写的代码,我所研究

这段代码从传感器获取数据并将其输出到文本文件中。“if”语句将每10毫秒循环一次

我需要做的是在“if”循环之前,我需要创建一个唯一的文件名,然后一旦代码到达if循环,它将能够输出文件

换句话说,我需要这段代码在每次运行代码时创建一个新的文件名。我能想到的唯一两种方法是使用某种东西生成随机数或使用某种东西生成日期/时间。但是请注意,当if循环运行时,它需要创建/打开相同的文本文件。仅当代码停止并再次运行时,才会创建新的文本文件名


我在C++编程中几乎没有知识,我只需要编辑我所编写的代码,我所研究的所有解决方案对我来说都没有什么意义,所以我想我来这里问一下。

你可以用日期作为文件名。获取当前日期和时钟,然后添加文件名,并用日期替换文件2。我认为有很多不同的方法。

基于第一个建议:

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

}

您可以将文件名与表示序列或文件号的后缀一起使用。例如,将第一个文件命名为yourFileName1,将第二个文件命名为yourFileName2,等等。您需要将最后一个文件的序列存储在一个文件中。第一次启动程序时,将文件的顺序设置为1。下次运行程序时,从序列文件sequenceFile.txt中读取最后一个序列,并将其递增1。在终止程序之前,应将最后一个序列存储回序列文件中

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开始,然后开始向上循环,直到找到一个没有取的数字。希望您不会留下数千个这样的文件,所以线性搜索下一个数字应该不会有太大问题。如果做不到这一点,只需要一个时间戳而不是一个序列号。
#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;
}