我有一个任务,我需要浏览文件夹中的所有文件。对于每个文件,我需要知道每个唯一的文件扩展名、每个唯一文件扩展名的文件数量以及每个唯一文件扩展名的总大小。我必须能够使用文件扩展名或文件扩展名的总大小对此进行排序。我首先想到的是一张地图。这将跟踪每个唯一的文件扩展名以及找到该文件扩展名的次数。我现在如何将文件扩展名的总大小与我的地图相关联?因此,例如,我需要输出是这样的:
使用文件扩展名进行排序 .cpp : 1 : 3400 .exe : 3 : 3455600 .mp4 : 25 : 200000404
使用总文件扩展名大小进行排序 .mp4 : 25 : 200000404 .exe : 3 : 3455600 .cpp : 1 : 3400
这是我经过一些编辑后的代码:
#include <iostream>
#include <filesystem>
#include <map>
using namespace std;
using namespace std::tr2::sys;
class fileInfo {
public:
int fileCount;
long long fileSize;
};
void scan(path f)
{
map<string, fileInfo> fileMap;
cout << "Scanning = " << system_complete(f) << endl;
directory_iterator d(f);
directory_iterator e;
for( ; d != e; ++d)
{
path p = d->path();
cout << "\nExtension is: " << extension(p) << "\tFile size is: " << file_size(p) << endl;
fileMap[extension(p)].fileCount ++;
fileMap[extension(p)].fileSize += file_size(p);
}
for (map<string, fileInfo>::iterator it = fileMap.begin(); it != fileMap.end(); ++it)
{
cout << it->first << " : " << it->second.fileCount << " : " << it->second.fileSize << endl;
}
}
int main(int argc, char* argv[] )
{
path folder = "..";
scan(folder);
return 0;
}
编辑:所以我已经实现了类 fileInfo。这是一种工作。但是我遇到了 file_size 的问题。在第一次循环运行后,它正确返回了 file_size,但对于每个其他循环运行,file_size 都返回 0。