boost :: filesystem :: remove_all () и std :: filesystem :: remove_all () ведут себя по-разному в Visual Studio 2017 - PullRequest
0 голосов
/ 18 октября 2018

Реализация Microsoft 100 * *std::filesystem::remove_all(), по-видимому, дает значения, отличные от исходных boost::filesystem::remove_all() при удалении пустых каталогов, за исключением подкаталогов.Улучшенная версия подсчитывает все удаленные объекты файловой системы, то есть оба каталога и , в то время как версия MS не считает подкаталоги, даже если она их удаляет.

Таким образом, с VS2017 и его std::experimental::filesystem::v1 пример программы, показанный по вышеуказанной ссылке:

#include <iostream>
#include <cstdint>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    fs::path dir = fs::temp_directory_path();
    fs::create_directories(dir / "abcdef/example");
    std::uintmax_t n = fs::remove_all(dir / "abcdef");
    std::cout << "Deleted " << n << " files or directories\n";
}

не возвращает официальный ответ

Удалено 2 файла или каталога

а точнее

удалено 0 файлов или каталогов

Я полагаю, это связано с неправильным пониманием спецификаций о том, что функция ...

Возвращает: Количество удаленных файлов

Может быть, MS интерпретирует «файл» строго как объект файловой системы file_type::regular_file вместо того, чтобы подчиняться определению в черновике, который явно объявляет файл как ...

Объект в файловой системе, который содержит пользовательские или системные данные.[...] Типы файлов включают обычные файлы и каталоги.


Вопрос

Это то, что я должен поднять в Microsoft, или я сам читаю Стандарт неправильно,или я вижу призраков, и никто другой не может даже воспроизвести это?

...