我在视觉工作室2015上工作,在Windows上。是否有可能从此代码中的路径获取每个文件或文件夹的大小: 我需要获得像int一样的大小,千字节数
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 :(得分: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);
}
}