我希望能够在文件的开头添加行。
我正在编写的这个程序将从用户那里获取信息,并准备将其写入文件。那么,该文件将是一个已经生成的差异文件,并且添加到开头的是描述符和标签,使其与 Debian 的 DEP3 补丁标记系统兼容。
这需要是跨平台的,所以它需要在 GNU C++ (Linux) 和 Microsoft C++(以及任何 Mac 附带的)中工作
(其他地方的相关主题:http ://ubuntuforums.org/showthread.php?t=2006605 )
我希望能够在文件的开头添加行。
我正在编写的这个程序将从用户那里获取信息,并准备将其写入文件。那么,该文件将是一个已经生成的差异文件,并且添加到开头的是描述符和标签,使其与 Debian 的 DEP3 补丁标记系统兼容。
这需要是跨平台的,所以它需要在 GNU C++ (Linux) 和 Microsoft C++(以及任何 Mac 附带的)中工作
(其他地方的相关主题:http ://ubuntuforums.org/showthread.php?t=2006605 )
请参阅trent.josephsen 的回答:
您不能在磁盘上文件的开头插入数据。您需要将整个文件读入内存,在开头插入数据,然后将整个内容写回磁盘。(这不是唯一的方法,但鉴于文件不是太大,它可能是最好的。)
您可以通过使用std::ifstream
输入文件和std::ofstream
输出文件来实现这一点。之后,您可以使用std::remove
并std::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;
}
另一种不使用remove
或rename
使用 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;
}