tellg() 估計檔案大小的誤解
C 中的tellg() 函數旨在傳回代表特定值的標記值檔案內的位置。稍後可使用該值使用eekg() 函數跳回該位置。但要注意的是,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中文網其他相關文章!