在C 中重写文本文件

Rewriting a text file in c++

本文关键字:文本 文件 重写      更新时间:2023-10-16

在处理文件流的程序上工作。我想编辑存储在文本文件中的文本行。据我了解,最好的方法是将所有内容从原始文件中复制,然后在新文件中重写它,从而使我的编辑沿途进行编辑。我无法在网上找到一个明确的示例,并且想知道我是否可以看到一个。

示例文本文件包含:

user1 pass1 55
user2 pass2 56
user3 pass3 57

我想编辑到它的位置:

user1 pass1 55
user2 pass2 44
user3 pass3 57

这是我的上下文删节代码:

#include <iostream>
#include <fstream>
using namespace std;
//function prototypes
void addUser();
void part1();
int main();
//global variables
    string username;
    string password;
    int balance;
void addUser(){
    //open a file in write mode
        ofstream myfile;
        myfile.open("userinfo.txt", ios::app);//append the text file
        if(myfile.is_open()){
        cout<<"Please Create a Username: ";
        string inputCheck;//a string to compare name
        cin>>inputCheck;
        cout<<"Please Create a Password: ";
        cin>>password;
        cout<<"Current Balance: ";
        cin>>balance;
        myfile<<inputCheck<<' '<<password<<' '<<balance<<"n";
        myfile.close();
        cout<<"User account '"<<inputCheck<<"' has been created"<<endl;
        }//ends create a password else
    part1();
}
void part1()
{
    cout<<"1.Add Usern2.Edit Information"<<endl;
    int input;
    cin>>input;
    if(input == 1){
        addUser();
    }else if(input == 2){
    //find the user
    cout<<"Enter the username: ";
    string checkUser;
    cin>>checkUser;
    ifstream infile("userinfo.txt"); //CREATING IFSTREAM
    ofstream outfile("pleasework.txt");
    bool foundUser = false;
    while(infile>>username>>password>>balance){
        if(checkUser==username){
        foundUser = true;
        break;
        }
    }
    if(foundUser){
    cout<<"Current Balance: "<<balance<<endl;
    cout<<"Enter new balance: ";
    int newBalance;
    cin>>newBalance;    
    if(infile.is_open()){
        outfile<<username<<' '<<password<<' '<<newBalance<<endl;
        //How do I get all of the other unedited accounts in here?!?!?!?!
        }
    }//end input 2
        infile.close();
outfile.close();
    }
}//end part 1
int main(){
    part1();
}

这是一些可能会有所帮助的伪代码:

方法1:

open existing file in 'read' mode
open new file in 'write' mode
for each line in existing:
    if line doesn't need update:
        write line to new file
    else:
        make changes to values from line
        write updated line to new file
close existing file
close new file
move new file over existing file

方法2:

open existing file in 'read/write' mode
data = array of lines
for each line in existing:
    read values into data
clear existing file
add/delete rows in data if necessary
for each row in data:
    update values in row
    write updated line to existing file
close existing file

呼叫

main();

递归使您拥有不确定的行为。因此,您无法可靠地期望任何事情。