確定一個二進制文件的大小似乎總是涉及將整個文件讀入內存。如何確定一個非常大的二進制文件的大小,這個大小比內存大得多?如何確定C++中一個巨大的二進制文件的大小
回答
在大多數系統中,有stat()
和 fstat()
功能(不是ANSI-C的一部分,但POSIX的一部分)。對於Linux,請查看man page。
編輯:對於Windows,文檔是here。
編輯:對於一個更便攜版本,使用Boost庫:
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
函數['stat()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html)和 [''fstat()'](http://pubs.opengroup.org /onlinepubs/9699919799/functions/fstat.html)是POSIX的一部分。一個使用文件名,另一個使用打開的文件描述符。你是正確的,他們不是標準C的一部分。 –
#include <cstdio>
FILE *fp = std::fopen("filename", "rb");
std::fseek(fp, 0, SEEK_END);
long filesize = std::ftell(fp);
std::fclose(fp);
或者,使用ifstream
:
#include <fstream>
std::ifstream fstrm("filename", ios_base::in | ios_base::binary);
fstrm.seekg(0, ios_base::end);
long filesize = fstrm.tellg();
這很好地工作,除非你在32位長整型(32位Unix或Windows 32位或64位)的系統上,並且該文件是2 GiB或更大。那麼你有一個問題 - 你無法將所需的額外位精確地表示爲一個32位值。 –
這應該工作:
uintmax_t file_size(std::string path) {
return std::ifstream(path, std::ios::binary|std::ios::ate).tellg();
}
- 1. 巨大的二進制文件的大小,而LD鏈接
- 2. 確定一個二進制文件的大小
- 3. 巨大的二進制文件與objcopy
- 4. 圖書館的iOS分裂巨大的二進制文件的特定大小?
- 5. 如何只選擇一部分巨大的二進制文件?
- 6. 二進制文件大小
- 7. 在一個二進制文件中的C++多個大文件
- 8. C++排序巨大的二進制文件
- 9. 確定直方圖二進制大小
- 10. 如何創建特定大小的二進制文件?
- 11. 限制巨大二進制數據文件的gnuplot圖
- 12. 日誌文件大小是巨大的
- 13. Swiffy runtime.js巨大的文件大小
- 14. 使用PdfStamper的巨大文件大小
- 15. 如何減少生成的二進制文件的大小?
- 16. 加載巨大的二進制文件部分到Matlab
- 17. ld連接器腳本產生巨大的二進制文件
- 18. 從一個更大的二進制文件中刷新一個大的二進制值
- 19. 如何讀取二進制文件的塊(未知大小)?
- 20. 與雙打的二進制文件的大小不一致(C/C++)
- 21. 如何讀取一個巨大的文件的塊特定的
- 22. 使用C++文件流(fstream),如何確定文件的大小?
- 23. ARM二進制大小
- 24. Lisp二進制大小
- 25. 二進制到十進制(在巨大的數字上)
- 26. 如何判斷大巴扎,一個是二進制文件
- 27. 如何正確繪製一個巨大的圖像
- 28. 減小Snap二進制文件的大小?
- 29. 如何確定錄製的音頻文件的大小
- 30. 如何確定C#對象的大小
文件系統知道它有多大 - 問吧。 –