C ++でテキストファイルにテキストを追加する方法


回答:


283

次のように追加オープンモードを指定する必要があります

#include <fstream>

int main() {  
  std::ofstream outfile;

  outfile.open("test.txt", std::ios_base::app); // append instead of overwrite
  outfile << "Data"; 
  return 0;
}

12
破壊時にファイルを閉じるため、ファイルを手動で閉じる必要はありません。stackoverflow.com/questions/748014を参照してください。また、<iostream>は例では使用されていません。
swalog

6
ios_base :: appの代わりにios :: appを使用できます
Trevor Hickey

4
std::ofstream::out | std::ofstream::app代わりに使用できますstd::ios_base::appか?cplusplus.com/reference/fstream/ofstream/open
Volomike

6
コードを削減したい場合は、コンストラクターでさらに多くのことを実行できます。std :: ofstream outfile( "test.txt"、std :: ios_base :: app);
沼地

outを使用するときにフラグを明示的に指定する必要はありません。フラグstd::ofstreamは常にout暗黙的に使用されます。のinフラグと同じですstd::ifstream。代わりに使用する場合はinout明示的にand フラグを指定する必要がありますstd::fstream
レミールボー・

12

このコードを使用します。ファイルが存在しない場合は確実に作成され、エラーチェックも追加されます。

static void appendLineToFile(string filepath, string line)
{
    std::ofstream file;
    //can't enable exception now because of gcc bug that raises ios_base::failure with useless message
    //file.exceptions(file.exceptions() | std::ios::failbit);
    file.open(filepath, std::ios::out | std::ios::app);
    if (file.fail())
        throw std::ios_base::failure(std::strerror(errno));

    //make sure write fails with exception if something is wrong
    file.exceptions(file.exceptions() | std::ios::failbit | std::ifstream::badbit);

    file << line << std::endl;
}

11
 #include <fstream>
 #include <iostream>

 FILE * pFileTXT;
 int counter

int main()
{
 pFileTXT = fopen ("aTextFile.txt","a");// use "a" for append, "w" to overwrite, previous content will be deleted

 for(counter=0;counter<9;counter++)
 fprintf (pFileTXT, "%c", characterarray[counter] );// character array to file

 fprintf(pFileTXT,"\n");// newline

 for(counter=0;counter<9;counter++)
 fprintf (pFileTXT, "%d", digitarray[counter] );    // numerical to file

 fprintf(pFileTXT,"A Sentence");                   // String to file

 fprintf (pFileXML,"%.2x",character);              // Printing hex value, 0x31 if character= 1

 fclose (pFileTXT); // must close after opening

 return 0;

}

28
これはCの方法であり、C ++ではありません。
Dženan

3
@Dženan。CがC ++のサブセットであっても、このアプローチは無効になりません。
オサイド2014

6
@Osaid CはC ++のサブセットではありません。コンパイラは、下位互換性のためにコードをコンパイルします。VLAなど、多くのC有効なものはC ++有効なものではありません。
stryku 2018

しかし、ファイルの途中にテキストを追加したい場合はどうでしょうか?Cスタイルで?FILEを使用* ?? fseek()およびftell()を使用した "a +"または "a"は私にとってはうまくいきませんでした
vincent thorpe

2

このようにすることもできます

#include <fstream>

int main(){   
std::ofstream ost {outputfile, std::ios_base::app};

ost.open(outputfile);
ost << "something you want to add to your outputfile";
ost.close();
return 0;
}

1
ファイル名をofstreamコンストラクタに渡すとファイルがすぐに開くため、open()後で呼び出すのは冗長です。
Remy Lebeau

1

「C ++プログラミングの簡単なステップ」という本から、答えのコードを入手しました。以下が動作するはずです。

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    ofstream writer("filename.file-extension" , ios::app);

    if (!writer)
    {
        cout << "Error Opening File" << endl;
        return -1;
    }

    string info = "insert text here";
    writer.append(info);

    writer << info << endl;
    writer.close;
    return 0;   
} 

これがお役に立てば幸いです。


1

を使用fstreamして、std::ios::appフラグで開くことができます。以下のコードを見てください。頭がよくなります。

...
fstream f("filename.ext", f.out | f.app);
f << "any";
f << "text";
f << "written";
f << "wll";
f << "be append";
...

オープンモードとfstreamの詳細については、こちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.