C/C ++에서 파일 크기를 얻는 휴대용 방법
-
19-09-2019 - |
문제
파일의 바이트 크기를 결정해야합니다.
코딩 언어는 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;
}
제휴하지 않습니다 StackOverflow