C++/Library 2021. 3. 29. 23:59

파일 임의 위치 접근

  • <fstream> 라이브러리

예제

  • ifs.seekg() 함수는 첫 번째 인자(Offset)를 받아서 그만큼 이동한다.

    • 두 번째 인자로 ios::cur(current)를 주면, 현재의 위치를 기준으로 오프셋만큼 이동한다.

      • 이외에도 ios::beg(begin), ios::end를 넣을 수 있다.
  • ifs.get() 함수는 커서 위치에서 1바이트를 읽고 반환한다.

    • 위치는 1바이트 뒤로 이동된다.
  • ifs.tellg() 함수는 현재 위치를 반환한다.

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int         main()
    {
        using namespace std;
    
        const string filename = "my_file.txt";
    
        {
            ofstream ofs(filename);
    
            // abcdefghijklmnopqrstuvwxyz
            for (char i = 'a'; i <= 'z'; ++i)
                ofs << i;
            ofs << endl;
        }
        {
            ifstream ifs(filename);
    
            ifs.seekg(5);
            cout << (char)ifs.get() << endl;
    
            ifs.seekg(5, ios::cur);
            cout << (char)ifs.get() << endl;
    
            string str;
            getline(ifs, str);
            cout << str << endl;
    
            ifs.seekg(0, ios::beg);
            cout << ifs.tellg() << endl;
    
            ifs.seekg(0, ios::end);
            cout << ifs.tellg() << endl;
        }
    }
    
    /* stdout stderr
    f
    l
    mnopqrstuvwxyz
    0
    28
    */

  • 파일 하나에 입출력을 같이 할 때는 fstream 클래스를 사용하면 된다.

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int         main()
    {
        using namespace std;
    
        const string filename = "my_file.txt";
    
        //fstream iofs(filename, ios::in | ios::out);
        fstream iofs(filename);
    
        iofs.seekg(5);
        cout << (char)iofs.get() << endl;
    
        iofs.seekg(5);
        iofs.put('A');
    }
    
    /* stdout stderr
    f
    */
    
    /* my_file.txt
    abcdeAghijklmnopqrstuvwxyz
    
    */

'C++ > Library' 카테고리의 다른 글

C++ atomic  (0) 2021.03.30
C++ mutex  (0) 2021.03.30
C++ fstream  (0) 2021.03.29
C++ 정규 표현식 (Regular Expressions)  (0) 2021.03.29
C++ 흐름 상태 (Stream States)  (0) 2021.03.29