2016-04-28 177 views
0

我在visual studio 2015中,在windows上工作。是否有可能從路徑獲取每個文件或文件夾的大小,在此代碼: 我需要獲得大小像一個整型,獲取文件夾的大小

vector<string>listDirectories(const char *path) { 
    DIR *dir = opendir(path); 

    vector<string> directories; 

    struct dirent *entry = readdir(dir); 

    while (entry != NULL) 
    { 
     if (entry->d_type == DT_DIR) 
      directories.push_back(entry->d_name); 

     entry = readdir(dir); 
    } 

    closedir(dir); 
    return directories; 


} 
+0

蠻力將[去調用'統計'](http://man7.org/linux/man-pages/man2/stat.2.html)目錄中的所有文件(及其子目錄.yay遞歸!)的名稱,並總結'stat :: st_size'。 – user4581301

回答

1

數千字節隨着新<filesystem>頭,你的確可以,只是#include <experimental/filesystem>(實驗,因爲它是一個C++ 17的功能 - 但你說明你正在使用VS2015所以它可以使用,這是好的),並檢查了以下做你需要的東西:

http://en.cppreference.com/w/cpp/experimental/fs/file_size

std::experimental::filesystem::file_size返回文件大小路徑爲整數個字節,請注意,path不是const char*std::string路徑,而是fs::path作爲文件系統標頭的一部分。

假設的問題,函數返回目錄中的文件列表,你可以做(​​未經測試)在給定的目錄打印每個文件大小:

#include <iostream> 
#include <fstream> 
#include <experimental/filesystem> 
#include <vector> 

namespace fs = std::experimental::filesystem; 

//... 

int main(void) { 
    std::vector<std::string> file_names_vec = listDirectories("dir"); 

    size_t folder_size = 0; 
    for (auto it = file_names_vec.begin(); it != file_names_vec.end(); ++it) { 
     fs::path p = *it; 
     std::cout << "Size of file: " << *it << " = " << fs::file_size(p) << " bytes"; 
     folder_size += fs::file_size(p); 
    } 
} 
+0

你能解釋我的代碼嗎? – Sebi95

+0

好的,怎樣才能獲得文件夾的大小? – Sebi95

+0

@ Sebi95您可以簡單地總結文件夾中每個文件的大小以獲得文件夾大小 – ArchbishopOfBanterbury