2015-04-26 3 views
-1

У меня есть функции перезаписывают данные на существующий файл, однако он не работает должным образом вот мой код:перезапись данных в .txt файл 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 

Любая помощь, пожалуйста ????

ответ

0

Вы открываете и, следовательно, перезаписываете новый файл каждый раз, когда вы достигаете printList, даже в том случае, если my_node имеет значение null. Если это не ваше намерение, переместите

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

в тело оператора if. Или, если вы хотите, чтобы все содержимое узлов содержалось в одном файле, выведите его из обхода.

отметить также, что ofstream сек застройщик принимает аргументы, так что вы можете написать

ofstream output("output.txt"); 
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(); 
+0

Это сработало окончательно :) спасибо –

Смежные вопросы