C++ c++;/以特定方式将数据附加到txt文件上

C++ c++;/以特定方式将数据附加到txt文件上,c++,text,ofstream,C++,Text,Ofstream,我有这样一个txt文件: 123456 123456 abcdef 用C++,我想打开它,并以下面的方式添加数据< /P> 123456新数据新数据 123456新数据新数据 新数据新数据 我已经在stackOverflow上看到了这个,但它是Python的 我使用了这个函数 std::ofstream file_to_save; file_to_save.open(path, ios::out | ios::app); 但它会将数据添加到文件的末尾,而不是每个单词的旁边 编辑:实际上,我

我有这样一个txt文件:

123456

123456

abcdef

用C++,我想打开它,并以下面的方式添加数据< /P> 123456新数据新数据

123456新数据新数据

新数据新数据

我已经在stackOverflow上看到了这个,但它是Python的

我使用了这个函数

std::ofstream file_to_save;
file_to_save.open(path, ios::out | ios::app);
但它会将数据添加到文件的末尾,而不是每个单词的旁边

编辑:实际上,我在循环中连续添加日期,而不是一次添加所有内容。这就是困难所在。所以我有一个包含所有日期的文件,然后在一个循环中创建新数据。让我们说“新数据”,然后我想把这个新数据(总是不同的)分配给已经存在的文件

123456

123456

abcdef

我在循环“newdata1”中创建新数据,然后像这样添加到文件中

123456新数据1

123456

abcdef

然后在循环的第2步,我创建“newdata2”,然后像这样添加到文件中

123456新数据1

123456新数据2

abcdef

然后在循环的第3步,我创建“newdata3”,然后像这样添加到文件中

123456新数据1

123456新数据2

abcdef新数据3

。。。 依此类推,直到填满整个文件

有人能帮我吗

感谢

这就是“ios::app”的工作原理——在文件末尾添加数据

您可能希望先读取每一行,然后覆盖所有行。

这就是“ios::app”的工作原理——在文件末尾添加数据


您可能希望先读取每一行,然后覆盖所有行。

读取所有文件并将字符串存储在向量中。对于向量中的每个元素,添加新数据,然后将它们写入文件,完全覆盖文件


或者,您可以使用查找功能逐行读取/覆盖文件

读取所有文件并将字符串存储在向量中。对于向量中的每个元素,添加新数据,然后将它们写入文件,完全覆盖文件


或者,您可以使用查找功能逐行读取/覆盖文件

您必须将现有文件的内容存储在数组中 或向量,并将其写回同一文件

void appendToFile(string sFilename, int nInsertAt, string sDataToInsert)
{
    std::ifstream infile("output.txt");

    string line;
    vector<string> vLines;

    while (std::getline(infile, line))
    {
        vLines.push_back(line);
    }

    infile.close();
    std::ofstream outfile("output.txt");

    for (int i = 0; i < vLines.size(); i++)
    {
        char buff[1024];
        if (i == nInsertAt)
        {
            sprintf(buff, "%s %s", vLines[i].c_str(), sDataToInsert.c_str());
            outfile << buff << endl;
        }
        else
        {
            outfile << vLines[i] << endl;
        }

    }

    outfile.close();
}

void test()
{
    for (int i = 0; i < 10; i++)
    {
        char buff[1024];
        sprintf(buff, "new data %d", i);
        appendToFile("output.txt", i, buff);
    }
}
void appendToFile(字符串sFilename、int-ninstertat、字符串sDataToInsert)
{
std::ifstream infle(“output.txt”);
弦线;
矢量线;
while(std::getline(infle,line))
{
线。推回(线);
}
infle.close();
std::ofstream outfile(“output.txt”);
对于(int i=0;ioutfile必须将现有文件的内容存储在数组中
或向量,并将其写回同一文件

void appendToFile(string sFilename, int nInsertAt, string sDataToInsert)
{
    std::ifstream infile("output.txt");

    string line;
    vector<string> vLines;

    while (std::getline(infile, line))
    {
        vLines.push_back(line);
    }

    infile.close();
    std::ofstream outfile("output.txt");

    for (int i = 0; i < vLines.size(); i++)
    {
        char buff[1024];
        if (i == nInsertAt)
        {
            sprintf(buff, "%s %s", vLines[i].c_str(), sDataToInsert.c_str());
            outfile << buff << endl;
        }
        else
        {
            outfile << vLines[i] << endl;
        }

    }

    outfile.close();
}

void test()
{
    for (int i = 0; i < 10; i++)
    {
        char buff[1024];
        sprintf(buff, "new data %d", i);
        appendToFile("output.txt", i, buff);
    }
}
void appendToFile(字符串sFilename、int-ninstertat、字符串sDataToInsert)
{
std::ifstream infle(“output.txt”);
弦线;
矢量线;
while(std::getline(infle,line))
{
线。推回(线);
}
infle.close();
std::ofstream outfile(“output.txt”);
对于(int i=0;ioutfile有很多方法可以做到这一点。最安全的方法通常是将每一行复制到一个新文件中,将所需的任何内容附加到该行,然后继续执行,直到输入文件结束

然后,您可以将数据从新文件复制回旧文件,或者(如果您确定没有其他指向该文件的链接)删除旧文件,然后将新文件重命名为旧文件名

或者,您可以从旧文件复制到临时文件,然后在将数据复制回旧文件时处理数据(最后删除临时文件)

将数据读入内存中,然后用新数据重写文件更为脆弱——如果在操作过程中发生崩溃或断电,文件很可能被销毁。(也就是说,您没有旧数据或新数据的副本。我会避免使用它,除非您真的非常担心速度而不是可靠性,以至于您不介意完全销毁数据的可能性

明显的代码:

std::ifstream input("filename");
std::ofstream output("filename2");

std::string line;

while (std::getline(input, line))
    output << line << " new data new data new data\n";
std::ifstream输入(“文件名”);
std::流输出(“filename2”);
std::字符串行;
while(std::getline(输入,行))

output执行此操作的方法有很多。最安全的方法通常是将每一行复制到一个新文件中,在该行中附加任何需要的内容,然后继续执行,直到输入文件结束

然后,您可以将数据从新文件复制回旧文件,或者(如果您确定没有其他指向该文件的链接)删除旧文件,然后将新文件重命名为旧文件名

或者,您可以从旧文件复制到临时文件,然后在将数据复制回旧文件时处理数据(最后删除临时文件)

将数据读入内存中,然后用新数据重写文件更为脆弱——如果在操作过程中发生崩溃或断电,文件很可能被销毁。(也就是说,您没有旧数据或新数据的副本。我会避免使用它,除非您真的非常担心速度而不是可靠性,以至于您不介意完全销毁数据的可能性

明显的代码:

std::ifstream input("filename");
std::ofstream output("filename2");

std::string line;

while (std::getline(input, line))
    output << line << " new data new data new data\n";
std::ifstream输入(“文件名”);
std::流输出(“filename2”);
std::字符串行;
while(std::getline(输入,行))

输出根据我在你的问题中读到的内容,你想要:

  • 读取行
  • 向其中添加新数据
  • 存储所有更新的行
  • 结束