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

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;
}
于 2012-06-19T19:52:10.183 に答える