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
使用しない別のアプローチ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;
}