6

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

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

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

(其他地方的相关主题:http ://ubuntuforums.org/showthread.php?t=2006605 )

4

1 回答 1

12

请参阅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");

    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;
}

另一种不使用removerename使用 a 的方法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;
}
于 2012-06-19T19:52:10.183 回答