将文本和行添加到文件的开头(C++)

Tho*_*ard 2 c++ cross-platform

我希望能够在文件的开头添加行.

我正在编写的这个程序将从用户那里获取信息,并准备它以写入文件.那么,该文件将是已经生成的差异,并且在开头添加的是描述符和标记,使其与Debian的DEP3 Patch标记系统兼容.

这需要跨平台,所以它需要在GNU C++(Linux)和Microsoft C++(以及任何Mac附带)中工作

(相关的线程别处:http://ubuntuforums.org/showthread.php?t=2006605)

Zet*_*eta 9

请参阅trent.josephsen的回答:

您无法在磁盘上的文件开头插入数据.您需要将整个文件读入内存,在开头插入数据,然后将整个文件写回磁盘.(这不是唯一的方法,但鉴于文件不是太大,它可能是最好的.)

您可以通过使用std::ifstream输入文件和std::ofstream输出文件来实现此目的.之后您可以使用std::removestd::rename替换旧文件:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>

int main(){
    std::ofstream outputFile("outputFileName");
    std::ifstream inputFile("inputFileName");
    std::string tempString;

    outputFile << "Write your lines...\n";
    outputFile << "just as you would do to std::cout ...\n";

    outputFile << inputFile.rdbuf();

    inputFile.close();
    outputFile.close();

    std::remove("inputFileName");
    std::rename("outputFileName","inputFileName");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一种不使用removerename使用的方法std::stringstream:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

int main(){
    const std::string fileName = "outputFileName";
    std::fstream processedFile(fileName.c_str());
    std::stringstream fileData;

    fileData << "First line\n";
    fileData << "second line\n";

    fileData << processedFile.rdbuf();
    processedFile.close();

    processedFile.open(fileName.c_str(), std::fstream::out | std::fstream::trunc); 
    processedFile << fileData.rdbuf();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • `while`循环可以用`outputFile << inputFile.rdbuf();`替换 (3认同)