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. 대신 사용 하는 경우 inand out플래그를 명시 적으로 지정해야합니다 std::fstream.
Remy Lebeau

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는이 방법을 무효화하지 않습니다.
Osaid

6
@Osaid C는 C ++의 하위 집합이 아닙니다. 컴파일러는 이전 버전과의 호환성을 위해 코드를 컴파일합니다. 많은 C- 유효한 것은 C ++-유효하지 않은 것들입니다 (예 : VLA).
stryku

그러나 파일 중간에 텍스트를 추가하려면? C 스타일로? 파일 사용 * ?? 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 ++ Programming In Easy Steps"라는 책에서 해답에 대한 코드를 얻었습니다. 아래는 가능합니다.

#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";
...

당신은 오픈 모드에 대한 자세한 정보를 찾을 수 있습니다 여기에 약하는 fstreams 여기 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.