>백엔드 개발 >C++ >`tellg()`를 사용하는 대신 C에서 파일 크기를 어떻게 정확하게 결정할 수 있습니까?

`tellg()`를 사용하는 대신 C에서 파일 크기를 어떻게 정확하게 결정할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-16 11:02:14991검색

How Can I Accurately Determine a File's Size in C   Instead of Using `tellg()`?

tellg() 함수 및 파일 크기

tellg()는 파일에서 현재 위치를 검색하는 데 사용되는 C 함수입니다. 그러나 Tellg()는 파일의 실제 크기를 바이트 단위로 제공하지 않는다는 점에 유의하는 것이 중요합니다. 대신 나중에 동일한 위치를 다시 찾는 데 사용할 수 있는 토큰 값을 반환합니다.

제공된 코드에는 Tellg()의 예상 동작과 관련하여 오해가 있는 것으로 보입니다. 코드는 파일 크기를 결정하기 위해 Tellg()를 사용하고, 이는 파일 내용을 보관할 버퍼를 할당하는 데 사용됩니다. 그러나 이러한 목적으로 Tellg()를 의존해서는 안 됩니다.

C 언어 사양에 따르면 Tellg()는 구현에 특정한 토큰 값을 반환합니다. 이는 Unix 시스템의 바이트 오프셋에 해당하는 경우가 많지만 Windows에서는 이 동작이 보장되지 않습니다. 텍스트 모드에서는 Windows가 현재 위치에 도달하는 데 필요한 실제 바이트 수보다 큰 값을 반환할 수 있습니다.

파일 크기를 정확하게 결정하려면 다음과 같은 대체 방법을 사용하는 것이 좋습니다.

#include <limits>

...

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount(); // Retrieve the size of the file in bytes
file.clear(); // Reset the file stream
file.seekg(0, std::ios_base::beg); // Return to the beginning of the file

또한 제공된 코드에는 몇 가지 문제가 있습니다.

  • *buffer = new char[length]; buffer = new char[length];로 수정되어야 합니다.
  • 크기에 int를 사용하는 것은 부적절합니다. 대신 std::streamsize를 사용해야 합니다.
  • 파일 열기에 실패한 경우 오류 처리가 제공되지 않습니다.

위 내용은 `tellg()`를 사용하는 대신 C에서 파일 크기를 어떻게 정확하게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.