tellg() ファイル サイズの推定における誤解
C の Tellg() 関数は、特定のデータを表すトークン値を返すように設計されています。ファイル内の位置。この値は、後で seekg() 関数を使用してその位置に戻るために使用できます。ただし、tellg() はファイルのサイズをバイト単位で直接提供しないことに注意することが重要です。
提供されたコード内:
void read_file(const char* name, int *size, char*& buffer) { ifstream file; file.open(name, ios::in | ios::binary); *size = 0; if (file.is_open()) { // Get length of file file.seekg(0, std::ios_base::end); int length = *size = file.tellg(); file.seekg(0, std::ios_base::beg); // Allocate buffer in size of file buffer = new char[length]; // Read file.read(buffer, length); cout << file.gcount() << endl; } file.close(); }
file.tellg() の呼び出しファイルのサイズを見積もるために使用されます。ただし、tellg() はファイル サイズを直接返さないため、このアプローチは正しくありません。
ファイル サイズを決定するための正しいアプローチ
ファイルのサイズを正確に決定するにはバイト単位で指定するには、次のアプローチを使用することをお勧めします。
#include <limits> file.ignore(std::numeric_limits<std::streamsize>::max()); std::streamsize length = file.gcount(); file.clear(); // Since ignore will have set eof. file.seekg(0, std::ios_base::beg);
このコードはファイルを最後まで読み取り、 gcount() 関数は、読み取られたバイト数を返します。この値は、ファイルの実際のサイズを表します。
補足
以上がC の `tellg()` 関数を使用してファイルのサイズを正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。