我們來創建一個補充問題this one。 在C++中獲取文件大小的最常用方法是什麼? 在回答之前,確保它是可移植的(可以在Unix,Mac和Windows上執行), 可靠,易於理解且不依賴庫(無需增強或qt,但例如glib可以,因爲它是便攜式庫)。如何在C++中獲取文件的大小?
回答
#include <fstream>
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.tellg();
}
有關C++文件的更多信息,請參閱http://www.cplusplus.com/doc/tutorial/files/。
使用fopen(),fseek()和ftell()函數也可以找到。
int get_file_size(std::string filename) // path to file
{
FILE *p_file = NULL;
p_file = fopen(filename.c_str(),"rb");
fseek(p_file,0,SEEK_END);
int size = ftell(p_file);
fclose(p_file);
return size;
}
雖然不一定是最流行的方法,我聽說FTELL,FSEEK方法可能並不總是給在某些情況下準確的結果。具體來說,如果已經打開的文件被使用並且需要處理該文件的大小並且它恰好被打開爲文本文件,那麼它將會發出錯誤的答案。
由於stat是Windows,Mac和Linux上c運行時庫的一部分,因此應始終使用以下方法。
long GetFileSize(std::string filename)
{
struct stat stat_buf;
int rc = stat(filename.c_str(), &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
or
long FdGetFileSize(int fd)
{
struct stat stat_buf;
int rc = fstat(fd, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
在某些系統上還有一個stat64/fstat64。所以,如果你需要這個非常大的文件,你可能想看看使用這些。
上述代碼可以移植到C&C++ – Matt 2013-12-04 22:45:34
+1中提到以二進制模式打開流。這解決了我在使用read()時使用fseek()+ ftell()大小的問題。 – 2014-11-07 20:14:09
我需要添加#包括
在C++中,你可以使用下面的函數,它會以字節的形式返回你的文件大小。
#include <fstream>
int fileSize(const char *add){
ifstream mySource;
mySource.open(add, ios_base::binary);
mySource.seekg(0,ios_base::end);
int size = mySource.tellg();
mySource.close();
return size;
}
這是行不通的,你不能將tellg輸出轉換爲int – 2018-01-25 10:29:29
@StepanYakovenko看看這個網址http://www.cplusplus.com/reference/istream/istream/tellg/ – 2018-01-26 18:55:28
使用C++文件系統TS:
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main(int argc, char *argv[]) {
fs::path p{argv[1]};
p = fs::canonical(p);
std::cout << "The size of " << p.u8string() << " is " <<
fs::file_size(p) << " bytes.\n";
}
值得注意的是'filesystem'是ISO C++的C++ 17 – chappjc 2016-12-10 02:17:47
所以比tellg快嗎? – 2018-03-07 02:11:16
#include<stdio.h
int main()
{
FILE *f;
f=fopen("mainfinal.c" , "r");
fseek(f,0, SEEK_END);
unsigned long len =(unsigned long)ftell(f);
printf("%ld\n",len);
fclose(f);
}
正好下面的代碼片斷解決了在此 交:)
///
/// Get me my file size in bytes (long long to support any file size supported by your OS.
///
long long Logger::getFileSize()
{
std::streampos fsize = 0;
std::ifstream myfile ("myfile.txt", ios::in); // File is of type const char*
fsize = myfile.tellg(); // The file pointer is currently at the beginning
myfile.seekg(0, ios::end); // Place the file pointer at the end of file
fsize = myfile.tellg() - fsize;
myfile.close();
static_assert(sizeof(fsize) >= sizeof(long long), "Oops.");
cout << "size is: " << fsize << " bytes.\n";
return fsize;
}
- 1. 如何獲取C文件的大小?
- 2. 在C中獲取FTP文件大小#
- 3. 在C++中獲取文件大小
- 4. 獲取文件的大小在objective-c
- 5. 如何在visual C++中獲取文件的大小?
- 6. 如何在Windows中使用C獲取文件夾大小?
- 7. 如何在C#中獲取文件夾大小?
- 8. 如何在C#Windows中獲取文件大小,文件名,文件擴展名?
- 9. 如何在android中獲取臨時文件的文件大小?
- 10. 如何從C#中的httpwebrequest獲取文件夾大小(Winform)
- 11. 如何獲取WAR文件的大小?
- 12. 如何獲取文件的大小
- 13. 如何獲取文件夾的大小?
- 14. 以C返回大小獲取大文件的大小爲0
- 15. 如何從OpenFileDialog獲取文件大小?
- 16. 如何獲取大型(> 4 GB)文件的文件大小?
- 17. 如何獲取mongodb集合中GridFS文件的文件大小?
- 18. 如何獲取文件大小並刪除Lua中的文件?
- 19. Java:如何:有效地獲取2GB大小的文件大小?
- 20. 如何獲取文件名,使用C#的大小?
- 21. 如何使用C++獲取文件的實際大小?
- 22. 如何從C/C++獲取virt大小?
- 23. 在os.walk中獲取文件大小
- 24. 在php中獲取文件大小
- 25. 在Python中獲取文件大小?
- 26. 如何在C#中獲取目錄大小(目錄中的文件)?
- 27. 如何在Android中獲取SD卡上文件夾的大小?
- 28. 如何在Makefile中獲取Unix上的文件大小?
- 29. 如何在PHP中獲取區分大小寫的文件名?
- 30. 遍歷FTP子文件夾來獲取文件大小在C#
的FSTAT功能的問題我相信是便攜式的,而且很容易使用。 – ultifinitus 2011-04-30 07:09:33
可能與http://stackoverflow.com/questions/2409504 – 2011-04-30 07:10:58
dupicated爲什麼沒有提升,但允許glib? Boost也是便攜式的。 – rve 2011-04-30 07:14:45