boost::filesystem::remove_all() и std::filesystem::remove_all() ведут себя по-разному в Visual Studio 2017

Внедрение Microsoft 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, или я сам читаю Стандарт неправильно, или я вообще вижу призраков, и никто другой не может даже воспроизвести это?

0 ответов

Другие вопросы по тегам