HOWTO · C++

C++에서 파일에 텍스트를 추가하는 방법

이 기사에서는 C++로 파일에 텍스트를 추가하는 방법을 설명합니다.

이 페이지의 내용

파일 작업은 프로그래밍에서 흔한 작업이며, C++는 파일 조작을 위한 강력한 도구를 제공합니다. 흔한 연산 중 하나는 기존 파일에 텍스트를 추가하는 것입니다.

이 기사에서는 이를 수행하는 여러 가지 방법을 살펴보고, 과정을 철저히 이해하는 데 도움이 되는 코드 예제와 설명을 제공합니다.

ofstream 및 std::ios::app 플래그를 사용하여 파일에 텍스트 추가

C++에서 std::ofstream 클래스는 Standard Template Library(STL)의 일부이며 파일에 쓰는 데 사용됩니다. 텍스트 파일을 만들거나, 열거나, 쓰거나, 데이터를 추가하려는 경우에 탁월한 선택입니다.

또한 std::ios::app 플래그는 std::ofstream의 중요한 구성 요소입니다. 이 플래그를 사용하면 스트림이 파일을 추가 모드로 열도록 지시하는데, 이는 스트림에 쓰는 모든 데이터가 기존 파일 내용의 끝에 추가됨을 의미합니다.

파일이 존재하지 않으면 파일이 생성됩니다.

이제 std::ofstream에 std::ios::app 플래그를 사용하여 C++에서 파일에 텍스트를 추가하려면 다음 단계를 따르세요:

  • 필요한 헤더 파일을 포함합니다:
    #include <fstream>
    #include <iostream>
    
  • std::ofstream 객체를 사용하여 추가 모드(std::ios::app)로 파일을 엽니다.
  • << 연산자를 사용하여 파일에 추가하려는 텍스트를 씁니다.
  • 완료되면 파일을 닫습니다.

예시는 다음과 같습니다:

#include <fstream>
#include <iostream>

int main() {
  // File path
  std::string filePath = "example.txt";

  // Open the file in append mode
  std::ofstream outputFile(filePath, std::ios::app);

  if (!outputFile) {
    std::cerr << "Failed to open the file for appending." << std::endl;
    return 1;
  }

  // Text to append to the file
  std::string textToAppend = "This is some appended text.";

  // Append the text to the file
  outputFile << textToAppend << std::endl;

  // Close the file
  outputFile.close();

  std::cout << "Text appended to the file successfully." << std::endl;

  return 0;
}

이 예제에서는 먼저 std::ios::app를 사용하여 example.txt 파일을 추가 모드로 열었습니다. 파일이 존재하지 않으면 파일이 생성됩니다.

그런 다음 << 연산자를 사용하여 지정된 텍스트를 파일에 추가하고, 마지막으로 파일을 닫았습니다.

파일을 열 수 없는 경우를 처리할 수 있도록, 예제에서와 같이 파일을 열 때 오류를 확인하세요.

fstream 및 std::ios::app 플래그를 사용하여 파일에 텍스트 추가

ofstream 접근 방식과 마찬가지로, std::fstream에 std::ios::app 플래그를 사용하여 읽기와 추가를 모두 할 수 있도록 파일을 열 수 있습니다.

C++에서 std::fstream 클래스는 Standard Template Library(STL)의 일부이며 파일 입력 및 출력에 사용됩니다. 텍스트 파일을 만들거나, 열거나, 쓰거나, 데이터를 추가해야 하는 경우에도 탁월한 선택입니다.

std::ios::app 플래그는 std::fstream의 필수 구성 요소입니다. 이 플래그를 적용하면 스트림이 파일을 추가 모드로 열도록 지시합니다.

이 모드에서는 스트림에 쓰인 모든 데이터가 기존 파일 내용의 끝에 추가됩니다. 파일이 존재하지 않으면 파일이 생성됩니다.

std::fstream에 std::ios::app 플래그를 사용하여 C++에서 파일에 텍스트를 추가하려면 다음 단계를 따르세요:

  • 필요한 헤더를 포함합니다:
    #include <fstream>
    #include <iostream>
    #include <string>
    
  • std::fstream 객체를 만들고 추가 모드로 파일을 엽니다:
    std::fstream file("example.txt", std::ios::app);
    
  • if (!file.is_open())를 사용하여 파일이 성공적으로 열렸는지 확인합니다.
  • file << textToAppend << std::endl;를 사용하여 파일에 텍스트를 추가합니다. textToAppend를 원하는 텍스트로 바꾸세요.
  • 완료되면 file.close();로 파일을 닫습니다.

전체 예시는 다음과 같습니다:

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

int main() {
  // Open the file in append mode
  std::fstream file("example.txt", std::ios::app);

  // Check if the file is opened successfully
  if (!file.is_open()) {
    std::cerr << "Error opening the file!" << std::endl;
    return 1;  // Exit with an error code
  }

  // Text to append
  std::string textToAppend = "This is the text to append.";

  // Append text to the file
  file << textToAppend << std::endl;

  // Close the file
  file.close();

  return 0;
}

이 코드는 파일을 추가 모드로 열고, 지정된 텍스트를 추가한 다음, 파일을 닫습니다.

파일이 존재하지 않으면 파일이 생성됩니다. 파일이 존재하면 기존 내용을 덮어쓰지 않고 새 내용이 파일 끝에 추가됩니다.

플래그 없이 std::ofstream를 사용하여 파일에 텍스트 추가

이제 새 파일을 만들거나 기존 내용을 덮어쓰려면 플래그 없이 std::ofstream를 사용할 수 있습니다. 파일이 이미 존재하면, 이 방법은 사실상 파일 내용을 지우고 빈 상태에서 시작합니다.

기본 예시는 다음과 같습니다:

#include <fstream>
#include <iostream>

int main() {
  // Creating a new file or overwriting existing content
  std::ofstream outputFile("example.txt");

  // Checking if the file is successfully opened
  if (outputFile.is_open()) {
    outputFile << "This will overwrite existing content.\n";
    outputFile.close();  // Always close the file when done
  } else {
    std::cerr << "Unable to open the file.\n";
  }

  return 0;
}

이 코드 스니펫에서는 먼저 outputFile이라는 이름의 std::ofstream 객체를 만들고 작업할 파일(이 경우 example.txt)을 지정했습니다.

std::fstream 및 write() 메서드를 사용하여 파일에 텍스트 추가

이 문제를 해결하는 또 다른 방법은 이전 예제에서 했던 것처럼 << 연산자를 사용하는 대신 fstream 객체에서 write 멤버 함수를 명시적으로 호출하는 것입니다. 이 방법은 대부분의 시나리오에서 더 빠르지만 엄격한 성능 요구 사항이 있는 경우 항상 코드를 프로파일링하고 타이밍을 비교하세요.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::string;

int main() {
  string text("Some huge text to be appended");
  string filename("tmp.txt");
  fstream file;

  file.open(filename, std::ios_base::app);
  if (file.is_open()) file.write(text.data(), text.size());
  cout << "Done!" << endl;

  return EXIT_SUCCESS;
}

위의 코드에서는 fstream 객체의 open() 메서드를 사용하여 파일을 추가 모드(std::ios_base::app)로 열었습니다. 또한 file.is_open()을 사용하여 파일이 성공적으로 열렸는지 확인했습니다.

그런 다음 write() 메서드를 사용하여 텍스트를 이진 데이터로 파일에 썼습니다. 보시다시피, 이 메서드는 데이터에 대한 포인터와 쓸 바이트 수라는 두 가지 인수를 받습니다.

마지막으로, 연산이 완료되었음을 나타내기 위해 Done!를 출력했습니다.

결론

이 기사에서 제시된 각 방법은 파일에 텍스트를 추가하는 고유한 접근 방식을 제공합니다. 어떤 방법을 선택할지는 구체적인 요구 사항과 코딩 스타일에 따라 다릅니다.