How to write to middle of a file in C++?

后端 未结 3 1316
北恋
北恋 2020-11-30 12:57

I think this should be quite simple, but my googling didn\'t help so far... I need to write to an existing file in C++, but not necessarily at the end of the file.

I

3条回答
  •  粉色の甜心
    2020-11-30 13:10

    You could write to the end and swap lines until it ends up in the right position. Here's what I had to do. Here's the test.txt file before:

    12345678
    12345678
    12345678
    12345678
    12345678
    

    Here's a sample of my program

    #include 
    #include 
    #include 
    
    using namespace std;
    
    fstream& goToLine(fstream& file, int line){
        int charInLine = 10;  //number of characters in each line + 2
                              //this file has 8 characters per line
    
        int pos = (line-1)*charInLine;
    
        file.seekg(pos);
        file.seekp(pos);
    
        return file;
    }
    
    fstream& swapLines(fstream& file, int firstLine, int secondLine){
        string firstStr, secondStr;
    
        goToLine(file,firstLine);
        getline(file,firstStr);
        goToLine(file,secondLine);
        getline(file,secondStr);
    
        goToLine(file,firstLine);
        file.write(secondStr.c_str(),8);    //Make sure there are 8 chars per line
        goToLine(file,secondLine);
        file.write(firstStr.c_str(),8);
    
        return file;
    }
    
    int main(){
        fstream file;
        int numLines = 5; //number of lines in the file
    
        //open file once to write to the end
        file.open("test.txt",ios::app); 
        if(file.is_open()){
            file<<"someText\n"; //Write your line to the end of the file.
            file.close();
        }
    
        //open file again without the ios::app flag
        file.open("test.txt"); 
        if(file.is_open()){
            for(int i=numLines+1;i>3;i--){ //Move someText\n to line 3
                swapLines(file,i-1,i);
            }
            file.close();
        }
    
        return 0;
    }
    

    Here's the test.txt file after:

    12345678
    12345678
    someText
    12345678
    12345678
    12345678
    

    I hope this helps!

提交回复
热议问题