我希望能够行添加到文件的开头。
这个程序我写会从用户的信息,并准备好它写入一个文件。 这个文件的话,将是已经产生了差异,什么被添加到开始是描述和标签,使其与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");
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;
}
不使用另一种方法remove
或rename
使用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;
}