获取文件夹的大小
Getting the size of a folder
我在 visual studio 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;
}
使用新的 <filesystem>
header 你确实可以,只是 #include <experimental/filesystem>
(实验性的,因为它是 C++17 的特性——但这很好,因为你说你正在使用VS2015 所以它可以使用)并查看以下内容以执行您需要的操作:
http://en.cppreference.com/w/cpp/experimental/fs/file_size
std::experimental::filesystem::file_size
returns路径给定的文件大小,整数字节,注意这个path
不是const char*
或者std::string
路径,而是作为文件系统 header.
一部分的 fs::path
假设问题 returns 中的函数是一个目录中的文件列表,您可以(未经测试)打印给定目录中的每个文件大小:
#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);
}
}
我在 visual studio 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;
}
使用新的 <filesystem>
header 你确实可以,只是 #include <experimental/filesystem>
(实验性的,因为它是 C++17 的特性——但这很好,因为你说你正在使用VS2015 所以它可以使用)并查看以下内容以执行您需要的操作:
http://en.cppreference.com/w/cpp/experimental/fs/file_size
std::experimental::filesystem::file_size
returns路径给定的文件大小,整数字节,注意这个path
不是const char*
或者std::string
路径,而是作为文件系统 header.
fs::path
假设问题 returns 中的函数是一个目录中的文件列表,您可以(未经测试)打印给定目录中的每个文件大小:
#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);
}
}