문제

파일의 바이트 크기를 결정해야합니다.

코딩 언어는 C ++이며 코드는 Linux, Windows 및 기타 운영 체제에서 작동해야합니다. 이는 표준 C 또는 C ++ 기능/클래스를 사용하는 것을 의미합니다.

이 사소한 요구는 분명히 사소한 해결책이 없습니다.

도움이 되었습니까?

해결책

STD 스트림을 사용하여 사용할 수 있습니다.

std::ifstream ifile(....);
ifile.seekg(0, std::ios_base::end);//seek to end
//now get current position as length of file
ifile.tellg();

쓰기 만 파일 (std :: ofstream)을 다루는 경우 메소드는 다음과 같습니다.

ofile.seekp(0, std::ios_base::end);
ofile.tellp();

다른 팁

통계 시스템 호출을 사용할 수 있습니다.

#ifdef WIN32 
_stat64()
#else
stat64()

파일 크기 만 필요하면 이것은 확실히 과잉이지만 일반적으로 나는 함께 갈 것입니다. boost.filesystem 플랫폼 독립적 파일 작업 용. 다른 속성 함수 중에는 포함됩니다

template <class Path> uintmax_t file_size(const Path& p);

참조를 찾을 수 있습니다 여기. 부스트 라이브러리가 크게 보일지 모르지만 종종 물건을 매우 효율적으로 구현하는 것이 발견되었습니다. 필요한 기능 만 추출 할 수 있지만 부스트가 다소 복잡하기 때문에 어려운 증거가 어려울 수 있습니다.

Simples :

std::ifstream ifs; 
ifs.open("mybigfile.txt", std::ios::bin); 
ifs.seekg(0, std::ios::end); 
std::fpos pos = ifs.tellg();

종종 우리는 가장 휴대 가능한 방식으로 일을하기를 원하지만, 특정 상황에서 특히 이와 같이 최고의 성능을 위해 System API를 사용하는 것이 좋습니다.

이식성은 C (C ++가 아님) 인 가장 일반적인 분모를 사용해야합니다. 내가 사용하는 방법은 다음과 같습니다.

#include <stdio.h>

long filesize(const char *filename)
{
FILE *f = fopen(filename,"rb");  /* open the file in read only */

long size = 0;
  if (fseek(f,0,SEEK_END)==0) /* seek was successful */
      size = ftell(f);
  fclose(f);
  return size;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top