Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-17 00:00
관리 메뉴

nomad-programmer

[Programming/C] fseek, ftell 함수 본문

Programming/C

[Programming/C] fseek, ftell 함수

scii 2020. 6. 16. 01:57

파일 내부의 작업 위치 탐색 및 확인: fseek, ftell 함수

fseek 함수

파일에 저장된 데이터를 꼭 순차적으로 읽을 필요는 없다. 필요에 따라 fseek함수를 사용하여 원하는 위치로 건너뛰거나, 읽은 위치로 돌아가서 읽었던 데이터를 다시 읽을 수도 있다.

// fseek 함수 원형
int fseek(FILE* stream, long offset, int origin);

// 함수 사용 형식
fseek(파일 포인터, 이동 거리, 기준 위치);

이 함수는 파일의 데이터를 읽을 기준 위치로 다음과 같은 명령이 존재한다.

* SEEK_SET: 파일의 시작

* SEEK_END: 파일의 끝

* SEEK_CUR: 현재 위치

이것들을 이용하여 지정한 기준 위치로부터 사용자가 지정한 "이동 거리" 만큼 이동한다.

이동 거리는 양수 또는 음수로 지정할 수 있고, 양수를 명시하면 지정한 기준 위치에서 뒤로 이동하며 음수를 명시하면 앞으로 이동한다. 그리고 실제로 이동한 위치는 파일 포인터에 저장된다.

// 파일의 시작 위치로 이동
fseek(fp, 0, SEEK_SET);

// 현재 위치에서 32바이트 만큼 뒤로 이동
fseek(fp, 32, SEEK_CUR);

이렇게 이동한 위치를 값으로 확인하고 싶다면 ftell 함수를 사용하면 된다.

 

ftell 함수

ftell 함수가 반환하는 값은 시작 위치를 0으로 계산한 값이다. 때문에 파일의 끝으로 이동한 후 ftell 함수를 사용하면 파일의 전체 크기를 알아낼 수 있다.

// 함수 원형
long ftell(FILE* stream);

// 함수 사용 형식
ftell(파일 포인터);
/*
현재 열려 있는 파일 내에서 데이터를 읽거나 저장할 위치
/*
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void) {
    int file_size = 0;
    // 읽기 모드로 바이너리 파일 오픈
    FILE* fp = fopen("tmp.bin", "rb");
    // 파일 열기에 성공했다면
    if (NULL != fp) {
        // 파일의 끝으로 이동
        fseek(fp, 0, SEEK_END);
        // 현재 파일 위치로 파일의 크기를 구함
        file_size = ftell(fp);
        printf("파일 크기: %d bytes\n", file_size);
        fclose(fp);
    }

    return 0;
}

// 결과
/*

파일 크기: 24 bytes

*/
Comments