C++에서 파일 처리
파일 처리는 C++ 표준 라이브러리에서 제공하는 클래스를 사용하여 파일(예: .txt, .csv 등)을 읽고 쓰는 것을 의미합니다.
- 프로그램이 RAM에서 실행된다는 것은 프로그램이 실행되는 동안에만 데이터가 존재한다는 의미입니다. 프로그램이 종료되면 RAM의 모든 데이터가 자동으로 손실됩니다.
- 파일 처리를 사용하면 데이터를 보조 메모리(예: HDD 또는 SSD)에 저장하여 영구적으로 보존할 수 있으며 프로그램이 종료된 후에도 저장하고 액세스할 수 있습니다.
- 파일 작업을 위해 C++에서는 파일 스트림 클래스를 제공합니다.
ofstream ifstream fstream과 같은 헤더.
파일 열기
파일을 읽거나 쓰기 전에 먼저 파일을 열어야 합니다. 파일을 열면 해당 파일이 RAM에 로드됩니다. C++에서는 다음을 사용하여 스트림을 생성하여 파일을 엽니다. fstream 파일 스트림, 즉 파일에 대한 입력 및 출력을 위한 스트림을 나타내는 클래스입니다.
C++ fstream str ( 'filename.ext' mode );
어디
- str: 스트림에 지정된 이름
- 파일 이름: 파일 이름
- 방법 : 파일과 상호 작용하는 방식을 나타냅니다.
파일 열기 모드
파일 열기 모드는 파일이 읽기 쓰기 또는 추가를 위해 열려 있음을 나타냅니다. 다음은 C++의 모든 파일 모드 목록입니다.
| 방법 | 설명 |
|---|---|
| iOS::에서 | 읽기용으로 파일이 열려 있습니다. 파일이 없으면 열기 작업이 실패합니다. |
| iOS::아웃 | 쓰기 위해 파일 열기: 내부 스트림 버퍼는 출력 작업을 지원합니다. |
| iOS::바이너리 | 작업은 텍스트가 아닌 바이너리 모드로 수행됩니다. |
| iOS::먹었다 | 출력 위치는 파일 끝에서 시작됩니다. |
| iOS::앱 | 모든 출력 작업은 기존 내용에 추가되는 파일 끝에서 발생합니다. |
| iOS::트렁크 | 파일을 열기 전에 파일에 있던 모든 내용은 삭제됩니다. |
예를 들어 읽기 위해 파일을 열려면 다음 열기 모드를 사용합니다.
C++ fstream filein ( 'file.txt' ios :: in );
마찬가지로 쓰기 위해 파일을 열려면 다음을 사용합니다.
C++ fstream fileout ( 'file.txt' ios :: out );
OR 연산자(|)를 사용하여 이러한 모드를 결합할 수도 있습니다. 예를 들어 다음과 같이 읽기 및 쓰기 모드 모두에서 파일 스트림을 열 수 있습니다.
C++ fstream str ( 'file.txt' ios :: in | ios :: out );
쓰기 모드로 열린 파일이 없으면 새 파일이 생성됩니다. 그러나 읽기 모드에서 열린 파일이 존재하지 않으면 새 파일이 생성되지 않고 예외가 발생합니다.
기타 파일 스트림
fstream C++에서 제공하는 유일한 파일 스트림은 아닙니다. 두 가지 더 전문화된 스트림이 있습니다:
- ifstream : 입력 파일 스트림을 나타냅니다. fstream을 여는 것과 동일합니다. iOS::에서 방법.
- 스트림의 : 출력 파일 스트림을 나타냅니다. fstream을 여는 것과 같습니다. iOS::아웃 방법.
위의 모드는 이러한 스트림의 기본 모드입니다. 이 모드는 변경할 수 없지만 다른 모드와 함께 클럽화할 수 있습니다. 이제 입력을 위해 다음과 같이 ifstream을 사용할 수도 있습니다.
C++ ifstream filein ( 'file.txt' );
마찬가지로 출력의 경우:
C++ ofstream fileout ( 'file.txt' );
파일에 데이터 쓰기
다음 중 하나를 사용하여 파일을 쓰기 모드로 열면 fstream 또는 스트림의 cout을 사용하여 비슷한 방식으로 쓰기 작업을 수행할 수 있습니다. < < operator.
C++ #include using namespace std ; int main () { // Open a file ofstream file ( 'GFG.txt' ); // Write the string to the file file < < 'Welcome to GeeksforGeeks.' ; return 0 ; }
GFG.text 파일에서 데이터 읽기
fstream 또는 ifstream을 사용하여 읽기 모드에서 파일을 열면 cin을 사용하여 비슷한 방식으로 쓰기 작업을 수행할 수 있습니다. >> 연산자.
C++ #include using namespace std ; int main () { // Open a file in read mode ifstream file ( 'GFG.txt' ); string s ; // Read string from the file file >> s ; cout < < 'Read String: ' < < s ; return 0 ; }
산출
Read String: Welcome이것은 cin과 동일한 문제가 있습니다. 입력은 첫 번째 공백 문자까지만 사용됩니다. 이를 방지하기 위해 우리는 다음을 사용할 수 있습니다. getline() 표시된 대로 기능:
C++#includeusing namespace std ; int main () { // Open a file in read mode ifstream file ( 'GFG.txt' ); string s ; // Read string from the file getline ( file s ); cout < < 'Read String: ' < < s ; return 0 ; }
산출Read String: Welcome to GeeksforGeeks.파일 닫기
파일을 닫는다는 것은 관련 스트림을 닫고 사용 중인 리소스를 해제하는 것을 의미합니다. 특히 장기 실행 프로그램에서는 메모리 누수, 데이터 손실 등을 방지하기 위해 작업을 마친 후 파일을 닫는 것이 중요합니다.
C++에서는 다음을 사용하여 파일을 닫습니다. 닫다() 모든 파일 스트림에 존재하는 멤버 함수입니다.
C++#includeusing namespace std ; int main () { // Open a file in read mode ifstream file ( 'GFG.txt' ); string s ; // Read string from the file getline ( file s ); cout < < 'Read String: ' < < s ; // Close the file file . close (); return 0 ; }
산출Read String: Welcome to GeeksforGeeks.파일 처리 오류
파일을 찾을 수 없습니다. 디스크가 꽉 찼습니다. 등 파일 처리 시 다양한 유형의 오류가 발생할 수 있습니다. 우리 프로그램은 일반적인 오류를 예상하고 이를 적절하게 처리할 수 있어야 합니다. 다음은 파일 처리 중에 발생할 수 있는 몇 가지 일반적인 오류입니다.
파일 열기 실패
파일이 존재하지 않거나 프로그램에 파일을 열 수 있는 권한이 없는 등 다양한 이유로 인해 파일이 열리지 않는 경우가 있을 수 있습니다. 이 경우 다음을 사용할 수 있습니다. is_open() 파일 스트림 클래스의 멤버 함수를 사용하여 파일이 성공적으로 열렸는지 여부를 확인합니다.
C++#includeusing namespace std ; int main () { fstream file ( 'nonexistent_file.txt' ios :: in ); // Check if the file is opened if ( ! file . is_open ()) { cerr < < 'Error: Unable to open file!' < < endl ; return 1 ; } file . close (); return 0 ; }
산출Error: Unable to open file!데이터 읽기/쓰기 실패
또 다른 일반적인 오류는 잘못된 모드 등의 이유로 데이터를 읽거나 쓰지 못하는 것입니다. 이 경우 각 읽기/쓰기 시도 후에 작업의 유효성을 검사할 수 있습니다. 예를 들어 getline()을 사용한 읽기는 다음과 같이 검증될 수 있습니다.
C++#includeusing namespace std ; int main () { fstream file ( 'GFG.txt' ios :: out ); if ( ! file . is_open ()) { cerr < < 'Error: Unable to open file!' < < endl ; return 1 ; } string line ; // Checking if getline() read successfully or not if ( ! getline ( file line )) cerr < < 'Error: Failed to read data' < < endl ; file . close (); return 0 ; }
산출Error: Failed to read data파일 끝(EOF) 오류
파일 끝을 넘어서 읽으려고 하면 EOF 오류가 발생할 수 있습니다. 읽기 전에 파일의 끝을 확인하지 않으면 이런 일이 발생할 수 있습니다. 다음을 사용하여 EOF를 확인할 수 있습니다. eof() 회원 기능.
C++#includeusing namespace std ; int main () { ifstream file ( 'GFG.txt' ); if ( ! file . is_open ()) { cerr < < 'Error: Unable to open file!' < < endl ; return 1 ; } string line ; while ( getline ( file line )) cout < < line < < endl ; // Check for eof if ( file . eof ()) cout < < 'Reached end of file.' < < endl ; else cerr < < 'Error: File reading failed!' < < endl ; file . close (); return 0 ; }
산출Reached end of file.EOF를 확인하기 전에 읽기 작업도 검증했습니다. getline() 만 돌아올 것이다 nullptr 어떤 이유로 인해 읽기가 실패하더라도 마찬가지입니다.
바이너리 파일 처리
C++에서는 다음도 처리할 수 있습니다. 바이너리 파일 데이터를 원시 형식으로 저장합니다. 바이너리 데이터를 읽고 쓰려면 다음을 사용해야 합니다. iOS::바이너리 바이너리 파일을 생성/열 때 플래그입니다.
바이너리 파일에 쓰기
바이너리 파일에 데이터를 쓰려면 먼저 파일을 열거나 생성해야 합니다. iOS::바이너리 방법.
C++#include#include #include using namespace std ; int main () { string str = 'Welcome to GeeksForGeeks' ; // Open a binary file for writing ofstream file ( 'fileBin.bin' ios :: binary ); // Check if the file is open if ( ! file ) { cerr < < 'Error opening the file for writing.' ; return 1 ; } // Write the length of the string (size) to file first size_t strLength = str . length (); file . write ( reinterpret_cast < const char *> ( & strLength ) sizeof ( strLength )); // Write the string to the binary file file . write ( str . c_str () strLength ); // Close the file file . close (); return 0 ; }
산출바이너리 파일
바이너리 파일에서 읽기
바이너리 파일에서 데이터를 읽기 위해 데이터를 쓰기 위해 바이너리 모드에서 파일을 여는 것과 마찬가지로 다음을 사용하여 읽기 모드에서 파일을 열어야 합니다. iOS::에서 .
통사론:
C++C++fstream fileInstance ( 'fileName.bin' ios :: in | ios :: binary );#include#include #include using namespace std ; int main () { string str ; // Open the binary file for reading fstream file ( 'fileBin.bin' ios :: in | ios :: binary ); // Check if the file is open if ( ! file ) { cerr < < 'Error opening the file for reading.' ; return 1 ; } // Read the length of the string (size) from the file size_t strLength ; file . read ( reinterpret_cast < char *> ( & strLength ) sizeof ( strLength )); // Allocate memory for the string and read the data char * buffer = new char [ strLength + 1 ]; // +1 for the null-terminator file . read ( buffer strLength ); // Null-terminate the string buffer [ strLength ] = ' ' ; // Convert the buffer to a string str = buffer ; // Print file data cout < < 'File Data: ' < < str ; delete [] buffer ; file . close (); return 0 ; }
산출File Data: Welcome to GeeksForGeeks기타 파일 작업
C++ 프로그램에서 파일을 조작하기 위해 더 많은 작업을 수행할 수도 있습니다. 일반적인 파일 작업 중 일부는 다음과 같습니다.
퀴즈 만들기
- 파일을 삭제하는 C++ 프로그램
- 기존 파일에 문자열 추가
- 한 파일을 다른 파일로 복사
바이너리 파일