2016-04-28 17 views
0

私はWindows上でvisual studio 2015で作業しています。このコードでのパスから各ファイルまたはフォルダのサイズを取得するための任意の可能性があります: 私はint型のようなサイズを取得する必要があり、あなたは確かにすることができる新しい<filesystem>ヘッダでキロバイトフォルダのサイズを取得する

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

ブルートフォースは、[ 'STATを呼び出すことであろう''(http://man7.org/linux/man-pages/man2/stat.2.html)ディレクトリ内のすべてのファイルの名前(およびそのサブディレクトリ。Yay recursion!)を調べ、 'stat :: st_size'。 – user4581301

答えて

1

の数だけ#include <experimental/filesystem>(それはC++ 17の機能であるような実験 - しかし、あなたはそれを使用するために利用可能ですので、あなたはVS2015を使用している状態として、これは結構です)、あなたが必要なものを行うには、次のチェックアウト:

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

std::experimental::filesystem::file_sizeは、与えられたファイルのサイズを返します。整数のバイト数のパス。pathconst 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

OK、フォルダのサイズはどのように取得できますか? – Sebi95

+0

@ Sebi95フォルダ内の各ファイルのサイズを合計して、フォルダサイズが – ArchbishopOfBanterbury

関連する問題