티스토리 뷰

기타 Storage

[C/C++] 파일 입출력 방법과 예제코드: ifstream, ofstream, fin, fout

rhyshan

# 파일 입력


1. ifstream class로 객체를 선언한다.


                            ifstream fin;


2. open() method를 사용하여 입력하길 원하는 파일을 지정한다.

    ifstream은 입력 전용이므로, 읽기 전용인지 쓰기 전용인지를 명시하지 않아도 됨.


                            fin.open("c://info.txt");


3. stream 객체를 사용, 입력.


                           fin>>str


4. 오픈한 파일을 닫는다        


                           fin.close();



ex) 화면에서 입력받은 정보로 "info.txt" 파일을 생성하는 코드


#include <fstream.h> // 파일 입출력 제공 클래스
#include <iomanip.h>

void main() {
 char name[20];
 int age;
 char address[20];

 int i;

 ofstream fout;
 fout.open("c://info.txt");

 cout<<"\n================파일 출력하기=============\n";
 for(i=0; i<3; i++) {
  cout<<i+1<<"번째 사람의 이름을 입력하세요=>";
  cin>>name;
  cout<<"나이를 입력하세요=>";
  cin>>age;
  cout<<"주소를 입력하세요=>";
  cin>>address;

  fout<<name<<setw(10)<<age<<setw(22)<<address<<endl;
  cout<<name<<setw(10)<<age<<setw(22)<<address<<endl;
 }
}


ex) "info.txt" 파일을 입력받아 화면으로 출력하는 코드


// A Simple Example of File Input #include <fstream.h> // C++ 파일 입출력 제공 클래스 #include <iomanip.h> void main() { char name[20]; int age; char address[20]; ifstream fin; // 입력 클래스 fin.open("c://info.txt"); cout<<"\n================파일에서 입력받기=============\n"; cout<<"\n이 름 나 이 주소\n"; cout<<"\n==============================================\n"; while(fin>>name>>age>>address) { cout<<name<<setw(10)<<age<<setw(22)<<address<<endl; } }



+ while(fin>>name>>age>>address)


입력 객체 fin은 성공적으로 입력을 하였으면 ifstream &을 리턴하지만, 파일의 끝(EOF)을 만나면 0을 리턴한다.

즉, 파일의 끝을 만나 더 이상 입력받을 데이터가 없으면 while 밖으로 벗어난다.



# 파일 출력


1. ofstream 클래스로 객체를 선언한다. 

   새로 생성될 객체(여기선 fout) 의 이름은 지정어를 제외하고 어떠한 이름이 와도 상관없다.


                          ofstream fout;


2. open() 메소드를 사용하여 출력하길 원하는 파일명을 지정한다.


                         fout.open("test.txt");


3. 스트림 객체를 사용, 출력.


                         fout<<" FILE OUTPUT. " <<endl;


4. 오픈한 파일을 닫는다.


                         fout.close();



ex) 파일출력의 간단한 예시코드


1
2
3
4
5
6
7
8
9
#include <fstream.h> //파일 입출력 제공 클래스 

void main() {
 ofstream fout; // 클래스 객체
 fout.open("C://test.txt");

 fout<<" FILE OUTPUT. " <<endl;
 fout.close();
}



ex) 문자 한 개를 get() 함수로 입력받아 "test2.txt" 파일에 출력하는 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// A Simple Example of File Input

#include <fstream.h> // C++ 파일 입출력 제공 클래스
#include <iomanip.h>

void main() {
 char ch;

 ofstream fout;
 fout.open("c://test2.txt");

 //^Z가 눌리기까지 문자를 한개씩 계속 입력받음
 while(cin.get(ch)) {
  fout<<ch;
 }
 fout.close();
}


@cmd:

TEST

^Z


@test2.txt:

TEST



ex) "test2.txt" 파일을 화면 출력하는 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// A Simple Example of File Input

#include <fstream.h> // C++ 파일 입출력 제공 클래스
#include <iomanip.h>
void main() {
 char ch;
 ifstream fin;

 fin.open("c://test2.txt");
 while(fin.get(ch))  {
  cout<<ch;
 }
 fin.close();
}


http://codepad.org/




댓글
  • 프로필사진 ??? #include <fstream>
    #include <iostream>

    using namespace std;

    #define MAX_SIZE 100
    char inputString[MAX_SIZE];

    int main(){
    // 파일 입력 (쓰기)
    ofstream outFile("output.txt");

    for(int i = 0 ; i < 10 ; i++){
    outFile << i << endl;
    }

    outFile.close();
    //파일 출력 (읽기)
    ifstream inFile("output.txt");

    while(!inFile.eof()){
    inFile.getline(inputString, 100);
    cout << inputString << endl;
    }
    inFile.close();
    return 0;
    }

    이렇게 작성했을때 불러오려는 파일에 계행문자 없이 글만 100자 이상이 들어있을때 MAX_SIZE가 100이고 inFile.getline(inputString, 100);이렇게 사이즈도 100일때 오류가 발생하나요? 아니면 마지막 100번째에는 알아서 NULL이 들어가나요?
    2016.09.21 14:18
  • 프로필사진 Favicon of https://rhyshan.com BlogIcon rhyshan getline은 input이 버퍼보다 크면, fail bit을 설정합니다. 아래처럼 clear로 fail bit을 무시할 수 있으나 eof를 찾지 못하지요.

    while (!inFile.eof()) {
    inFile.getline(inputString, 10);
    inFile.clear();
    cout << inputString << endl;
    }
    2016.09.21 23:52 신고
  • 프로필사진 Favicon of https://rhyshan.com BlogIcon rhyshan 아래처럼 <string>에 정의되어 있는 getline 함수를 사용하는 것이 마음 편하겠습니다.

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

    using namespace std;

    #define MAX_SIZE 100
    string inputString;

    int main() {
    // 파일 입력 (쓰기)
    ofstream outFile("output.txt");

    for (int i = 0; i < 20; i++) {
    outFile << "aaaaaaaaaabbbbbbbbbbbbccccccccccccccccccddddddddddddd" << endl;
    }

    outFile.close();
    //파일 출력 (읽기)
    ifstream inFile("output.txt");

    while (!inFile.eof()) {
    getline(inFile,inputString);
    cout << inputString << endl;
    }
    inFile.close();
    return 0;
    }
    2016.09.21 23:54 신고
  • 프로필사진 비밀댓글입니다 2019.06.20 13:20
댓글쓰기 폼