Как правильно получить размер файла с помощью std::experimental::filesystem? c++

198
05 июня 2018, 19:00

С плюсами только знакомлюсь. Пытаюсь получить список файлов и папок в директори и для файлов размер. Код:

#include "stdafx.h"
#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
    std::string path = "C:\\";
    for (auto & p : fs::directory_iterator(path))
    {
        std::cout << p << std::endl;
        const fs::v1::path target(p);
        //bool x = fs::is_directory(target);
        if (!fs::is_directory(target))
        {
            try {
                std::cout << fs::file_size(target) << std::endl;
            }
            catch (fs::filesystem_error const & e)
            {
                std::cout << "Error: " << e.what() << '\n';
            }
        }
    }
    system("PAUSE");
}

Результат:

C:\$GetCurrent
C:\$Recycle.Bin
C:\Config.Msi
C:\hiberfil.sys
Error: file_size(p): invalid argument: operation not permitted
C:\HP
C:\inetpub
C:\Intel
C:\My
C:\pagefile.sys
Error: file_size(p): invalid argument: operation not permitted
C:\PerfLogs
C:\Program Files
C:\Program Files (x86)
C:\ProgramData
C:\Recovery
C:\swapfile.sys
Error: file_size(p): invalid argument: operation not permitted
C:\SWsetup
C:\System Volume Information
C:\system.sav
C:\test
C:\Tool
C:\Users
C:\Windows
C:\Windows.old
C:\Windows10Upgrade

fs::file_size(p) дает такой же результат. Как правильно получить размер файла?

Answer 1

Размер доступен прямо в directory_entry (код для VS2017, стандарт c++17):

#include <filesystem>
#include <iostream>
#include <string>
int main()
{
    ::std::string path{"C:\\"};
    for(auto & p : ::std::filesystem::directory_iterator{path})
    {
        ::std::cout << p.path() << ::std::endl;
        if(not p.is_directory())
        {
            ::std::cout << p.file_size() << ::std::endl;
        }
    }
    system("PAUSE");
}   
READ ALSO
Как создать такой дизайн (волны)

Как создать такой дизайн (волны)

Как мне сделать такие волныТам вся сложность в перекрытии цветов

216
Обновление объекта

Обновление объекта

помогите пожалуйстаЕсть 2 массива, один с объектами другой числовой

259