覆盖.txt文件中的数据c ++

时间:2015-04-26 20:57:48

标签: c++

我有一个函数会覆盖现有文件的数据,但是这里没有正常工作是我的代码:

 void printList(entry* my_node)
 {  
        ofstream output;      
        output.open("output.txt");

        std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf

        if(my_node == NULL) return;
        else {
            string x=my_node->forename;
            output<<x<<endl; 
            output<<my_node->surname<<endl;
            output<<my_node->email<<endl;
            output<<my_node->number<<endl;
            std::cout<<"forename:  "<<my_node->forename<<std::endl; 
            std::cout<<"surname:  "<<my_node->surname<<std::endl;
            std::cout<<"email:  "<<my_node->email<<std::endl;
            std::cout<<"Phone Number:  "<<my_node->number<<std::endl;

            printList(my_node->next);   
            output.close();
        }
}

当我这样做时,它清除文件并且不写任何内容...我还试图先清除文件然后写入文件

output.clear();

output.close();

output.open("output.txt",ios ::out|ios::app);

std::streambuf *coutbuf = std::cout.rdbuf();

//save old buf

///and then the rest but it didn't work as well

任何帮助请????

2 个答案:

答案 0 :(得分:1)

您使用每个下一个值递归调用printList,直到您到达列表的末尾,该列表调用printlist(NULL)。然后输出文件最后一次被截断 。这就是文件为空的原因。

要将整个列表写入文件,请使用循环并在循环内部写入每个元素,例如:

while (my_node != NULL) {
    output << my_node->forename << endl;
    output << my_node->surname << endl;
    output << my_node->email << endl;
    output << my_node->number << endl;
    /* ... */
    my_node = my_node->next;
}

output.close();

答案 1 :(得分:0)

即使在printList为空的情况下,您也会在每次到达my_node时打开并覆盖新文件。如果这不是您的意图,那么移动

ofstream output;
output.open("output.txt");

进入if语句的主体。或者,如果您希望所有节点内容都在同一个文件中,请将其移出遍历。

另请注意ofstream的构造函数接受参数,因此您可以编写

ofstream output("output.txt");