2012-02-24 3 views
0

파일 스트림이 C이고 파일을 반복하지 않고 얼마나 많은 행이 있는지 알고 싶습니다. 각 줄은 같은 길이입니다. 어떻게이 일을 할 수 있을까요?c 파일 스트림의 행 수

답변

3

이런 일에 대해 어떻게 :

  • fgets를 수행 한 라인 fseekftell

    fseek(fp, 0, SEEK_END); 
    size = ftell(fp); 
    
  • 나누기를 사용하여 파일의 크기를 찾기

  • 얼마나 오래 알아 줄의 크기에 따라

off_t과 호환되는 fseekoftello을 사용할 수도 있습니다.

0

한 줄로 stat() 파일을 읽고 get the total size으로 파일의 전체 크기를 첫 번째 줄의 길이로 나눕니다.

stat()을 사용하는 대신 파일 끝에 fseek()을 입력 한 다음 ftell()을 사용하여 크기를 확인할 수도 있습니다.

+0

실제로'stat' (또는 실제로'fstat')도 사용 하겠지만 이식성이 없습니다. –

0

ftell()을 가져 와서 줄의 길이로 나눕니다.

2

모든 행의 길이가 같다고 가정하는 것이 안전하면 첫 번째 행을 읽고 길이를 얻은 다음 파일 크기를 얻고 파일 길이를 줄 길이로 나누면됩니다.

고정 너비 인코딩 (ASCII-7, 다양한 8 비트 ANSI 인코딩, UTF-32)에서만 작동합니다. 가변 길이 인코딩 (예 : UTF-8)을 사용하면 문자열 길이가 반드시 바이트 수에 비례하지 않기 때문에 전체 파일을 스캔해야합니다.