如何在C++中向文件中写入多行而不丢失前几行

How to write multiple lines to file in C++ without losing previous lines

本文关键字:几行 C++ 文件      更新时间:2024-09-29

我需要在一个txt和二进制文件中写入多行,我创建了一个函数(我将在下面附加它(,该函数应该向文件中写入一些数组项。问题是,当我在同一个函数中打开和关闭文件时,我使用了fprintf,所以每次我的for(因为它是一个数组(调用该函数时,它都会覆盖文件。我正在考虑分别在for之前和之后打开文件和关闭它。有没有一种更优雅的方式来做我想要的事情?目前,我使用文件I/O进行咨询,它只提到fprintf。

这是我的代码:

#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
struct numarComplex {
int parteReala = 0;
int parteFractionara = 0;
}numere[5];
void printareNumar (struct numarComplex numar) {
printf("Numarul este: %d.%dn", numar.parteReala, numar.parteFractionara);
printf("n");
}
void citireNumar (struct numarComplex *numar) {
printf ("Introduceti partea reala: ");
scanf("%d", &numar -> parteReala);
printf ("Introduceti partea fractionara: ");
scanf("%d", &numar -> parteFractionara);
}
void scriereNumarTxt (struct numarComplex numar) {
// am decis ca la alegerea data sa se scrie in fisier .txt, sa se utilizeze numerele introduse de la tastatura in 1, pentru comoditate
FILE *nrTxt;
nrTxt = fopen("./numarcomplex.txt", "w+");
fprintf(nrTxt, "%d.%dn", numar.parteReala, numar.parteFractionara);
fclose(nrTxt);
}
int main()
{
int optiune;
do {
printf("Meniu: n");
printf("1. Citire de la tastatura: n");
printf("2. Afisare la ecran: n");
printf("3. Citire din fisier text: n");
printf("4. Scriere in fisier text: n");
printf("5. Citire din fisier binar: n");
printf("6. Scriere in fisier binar: n");
printf("7. Iesire: ");
scanf("%d", &optiune);
switch (optiune) {
case 1: {for (int i = 0; i < 5; i++) {
citireNumar(&numere[i]);
}
break;
}
case 2: {
printf("Tabloul de structuri: n");
for (int i = 0; i < 5; i++) {
printareNumar(numere[i]);
}
break;
}
case 4: {
for (int i = 0; i < 5; i++) {
scriereNumarTxt(numere[i]);
} break;
}
}
} while (optiune != 7);
}

使用:

#include <fstream>
int main() {  
std::ofstream outfile;
outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
outfile << "Data"; 
return 0;
}

以上方法将附加文件