Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 90

Функция для удаление папки и всего содержимого в ней

16.09.2020, 17:54. Показов 4339. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подкинете функции, лень самому писать. Я пробовал гуглить там не было не рабочие
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2020, 17:54
Ответы с готовыми решениями:

Написать скрипт для архивирования всего содержимого заданной папки, кроме файлов с расширением .TXT
Друзья помогите пожалуйста в написании скрипта. Я в этом мягко говоря не силен. Если кто выручит буду благодарен. Нужно написать cmd...

Копирование всего содержимого папки
Всем доброго времени суток! Столкнулся с задачей, что необходимо провести копирование всего содержимого флешки в любую папку (допусти...

Удаление всего содержимого из ОЗУ
Доброго времени суток! Точно не знал в какою тему писать, поэтому написал сюда. Такой вопрос, нужно полностью удалить все из...

12
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
16.09.2020, 17:55
std::filesystem::remove_all
0
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 90
16.09.2020, 18:13  [ТС]
Nishen, я это смотрел, но у меня компилятор не ищет filesystem, как его подключить?
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
16.09.2020, 18:13
Без понятия, что у тебя за компилятор.
0
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 90
16.09.2020, 18:29  [ТС]
Nishen, я пробую std::filesystem::remove_all() пишет что имя за которым селдует :: должно определять класс или пространство имен
Цитата Сообщение от Nishen Посмотреть сообщение
Без понятия, что у тебя за компилятор.
обычная визуел студио 2019

Добавлено через 11 минут
именоо подчеркивает filesystem
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
16.09.2020, 18:30
Не работает рабочий код в моей VS 2019
0
0 / 0 / 0
Регистрация: 11.07.2020
Сообщений: 90
16.09.2020, 18:45  [ТС]
Nishen, жаль что это дополнительный crt, я иду в раздел WinApi
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.09.2020, 19:11
Цитата Сообщение от Nishen Посмотреть сообщение
std::filesystem::remove_all
с практической точки зрения данный инструмент бесполезен чуть менее, чем полностью.

причина очень простая:
люди, которые проектировали дизайн remove_all почему то проигнорировали
реальный опыт работы с данным функционалом,
и не учли реальные проблемы, с которыми неизбежно столкнётся бизнес-логика.

хочешь узнать каким на самом деле должен быть дизайн std::filesystem::remove_all?
тогда взгляни на ключи стандартных консольных команд удаления файлов/каталогов.
эти ключи возникли не просто так.
без них консольные команды оказались бы бесполезным неюзабельным хламом.
их поддержку добавили, потому что без них просто нереально было бы пользоваться.

однако в fs::remove_all данные ключи не завезли.
и как только дело дойдет до реального использования,
первое что ты сделаешь - откажешься от этого метода.

а второе что ты сделаешь: реализуешь мопед на том же WINAPI.

в чем проблема?
ты просто хочешь взять и удалить некоторый каталог.
это - типичная задача для файловой системы.
а вот хрен тебе. в большинстве случае fs::remove_all его удалить не сможет.

Цитата Сообщение от WalStrile Посмотреть сообщение
WinApi
не благодари:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <Windows.h>
#include <stdexcept>
#include <cassert>
#include <string>
//==============================================================================
//==============================================================================
namespace fsystem
{
    namespace
    {
        template<class s> bool is_dots(const s& path) noexcept
        {
            const auto& a = path[0];
            const auto& b = path[1];
            const auto& c = path[2];
            if (a == '.' && (b == 0 || (b == '.' && c == 0)))
                return true;
            return false;
        }
 
        ::DWORD reset_attrib(const ::std::string& path)
        {
            const ::DWORD attr = ::GetFileAttributesA(path.c_str());
 
            if (attr == INVALID_FILE_ATTRIBUTES)
                throw ::std::runtime_error(
                    "reset_attrib(): "
                    "can't get attributes for file: '" + path + "'"
                );
 
            constexpr const ::DWORD all
                = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
 
            const ::DWORD attr2 = attr & (~all);
 
            if (!::SetFileAttributesA(path.c_str(), attr2))
                throw ::std::runtime_error(
                    "reset_attrib(): "
                    "can't set attributes for file: '" + path + "'"
                );
 
            return attr;
        }
 
        struct raiiA
        {
            raiiA(const ::std::string& dir): hFind()
            {
                ::std::string mask = dir + "\\*";
 
                this->hFind 
                    = ::FindFirstFileA(mask.c_str(), &this->ffd);
 
                if (this->hFind == INVALID_HANDLE_VALUE)
                    throw ::std::runtime_error(
                        "remove_directory(INVALID_HANDLE_VALUE): '" 
                        + dir + "'"
                    );
            }
 
            bool next() noexcept
            {
                return ::FindNextFileA(this->hFind, &this->ffd);
            }
 
            ~raiiA()
            {
                const ::BOOL re = ::FindClose(this->hFind);
                assert(re);
                (void) re;
            }
 
            ::HANDLE hFind;
            ::WIN32_FIND_DATAA ffd;
        };
 
    } // namespace
 
//==============================================================================
//==============================================================================
 
    bool is_directory(const ::std::string& path)
    {
        const ::DWORD attr = ::GetFileAttributesA(path.c_str());
        if (attr == INVALID_FILE_ATTRIBUTES)
            throw ::std::runtime_error(
                "is_directory(): "
                "can't get attributes for file: '" + path + "'"
            );
 
        if (attr & FILE_ATTRIBUTE_DIRECTORY)
            return true;
        return false;
    }
 
    void remove_file(const ::std::string& path)
    {
        const auto old = fsystem::reset_attrib(path);
        if (::DeleteFileA(path.c_str()))
            return;
 
        const auto re = ::SetFileAttributesA(path.c_str(), old);
        assert(re);
        (void)re;
        throw ::std::runtime_error(
            "remove_file(): '" + path + "'"
        );
    }
 
    void remove_directory(const ::std::string& dir)
    {
        ::fsystem::raiiA data(dir);
        while(data.next())
        {
            if (fsystem::is_dots(data.ffd.cFileName))
                continue;
 
            const auto path 
                = dir + "\\" + data.ffd.cFileName;
 
            if (data.ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                fsystem::remove_directory(path);
            else
                fsystem::remove_file(path);
        }
 
        if (::GetLastError() != ERROR_NO_MORE_FILES)
            throw ::std::runtime_error(
                "delete_directory(FindNextFile): '"
                + dir + "'"
            );
 
        // remove the empty directory
        if (!::RemoveDirectoryA(dir.c_str()))
            throw ::std::runtime_error(
                "delete_directory(RemoveDirectory): '"
                + dir + "'"
            );
    }
 
    void remove_all(const ::std::string& path)
    {
        if(!::fsystem::is_directory(path))
            remove_file(path);
        else
            ::fsystem::remove_directory(path);
    }
 
} // namespace fsystem
2
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 3
17.09.2020, 13:22
Цитата Сообщение от WalStrile Посмотреть сообщение
но у меня компилятор не ищет filesystem, как его подключить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
///--------------------------------------------------------|
/// Это ещё поддерживается в VS 2019                       |
///--------------------------------------------------------:
#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
#include <experimental/filesystem>
using namespace std::experimental::filesystem;
 
///--------------------------------------------------------|
/// C++17 standard header file name                        |
///--------------------------------------------------------:
#include <filesystem> 
namespace fs = std::filesystem;
 
void show_dir(const char* s)
{   std::cout << s << "\n";
    for (auto& file : fs::recursive_directory_iterator("./"))
    {   std::cout << file.path() << '\n';
    }
}
 
int main()
{
    setlocale(0, "");
    show_dir("|-------------------------------Директория exe ПЕРЕД удалением:");
 
    fs::remove_all("dir_test");
 
    show_dir("|-------------------------------Директория exe ПОСЛЕ удаления :");
 
    std::cin.get();
}
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.09.2020, 14:58
Цитата Сообщение от XLAT Посмотреть сообщение
Это ещё поддерживается в VS 2019
при сборке различными компиляторами вылезают конфликты:
#include <experimental/filesystem> VS #include <filesystem>

возникает вопрос: как же все таки правильно подключать хэдер filesystem,
что бы это компилировалось и работало на разных компиляторах?


https://rextester.com/CAGSN64651

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once
#ifndef STD_FILESYSTEM_USED_
#define STD_FILESYSTEM_USED_
//==============================================================================
//==============================================================================
 
    #ifndef INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
    #   if defined(__cpp_lib_filesystem)
    #       define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
    #   elif defined(__cpp_lib_experimental_filesystem)
    #       define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
    #   elif !defined(__has_include)
    #       define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
    #   elif __has_include(<filesystem>)
    #       ifdef _MSC_VER
    #           if __has_include(<yvals_core.h>)
    #               include <yvals_core.h>
    #               if defined(_HAS_CXX17) && _HAS_CXX17
    #                   define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
    #               endif
    #           endif
    #           ifndef INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
    #               define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
    #           endif
    #       else
    #           define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
    #       endif
    #   elif __has_include(<experimental/filesystem>)
    #       define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
    #   else
    #       error Could not find system header "<filesystem>" or "<experimental/filesystem>"
    #   endif
    #endif 
 
    #   if !INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
    #       include <filesystem>
    #   else
    #       include <experimental/filesystem>
            namespace std 
            {
                namespace filesystem = experimental::filesystem;
            }
    #endif 
 
    namespace fs = ::std::filesystem;
 
//==============================================================================
//==============================================================================
 
#endif // !STD_FILESYSTEM_USED_
1
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 3
22.09.2020, 14:04
взгляни на ключи стандартных консольных команд удаления файлов/каталогов.
эти ключи возникли не просто так.
читаю щас блог линуксоида:
Code
1
2
3
4
5
...
К тому же в линуксе нет блокировки файла, если его использует какое-то приложение! Например 
ты можешь сбросить фонограмму, начать ее воспроизведение, и потом переименовать её, 
как тебе нужно и переместить в нужный каталог, и никакой ошибки или запрета! И таких мелочей сотни! 
...
я ни разу не юзер линукса, поэтому я поражен

Не по теме:

Добавлено через 2 минуты

Цитата Сообщение от hoggy Посмотреть сообщение
при сборке различными компиляторами вылезают конфликты:
#include <experimental/filesystem> VS #include <filesystem>
нет там никаких конфликтов по причине,
что <experimental/filesystem> уже давно(относительно) в топке.

там я его приколол ради ретроспективы.

0
11.10.2020, 22:44

Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
К тому же в линуксе нет блокировки файла,
что-то ерунду какую-то этот товарищ пишет. Есть блокировки.

0
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 3
11.10.2020, 23:27
Цитата Сообщение от Vladimir. Посмотреть сообщение
что-то ерунду какую-то этот товарищ пишет
Почему я ушёл с Windows.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2020, 23:27
Помогаю со студенческими работами здесь

Архивация всего содержимого папки без сохранения структуры каталогов по пути к нему
Эта команда копирует всё из папки: work\Разобранные\android.policy.jar\original\ в архив...

Удаление содержимого папки
Как из папки удалить все документы. Т.е. есть имя папки и нужно ее очистить. Удалить все содержащиеся в ней документы. Без...

Удаление содержимого папки
Друзья у меня идиотская проблема, нужно тупо очистить папку батником, пишу RMDIR C:\32423 /q /s Удаляется и сама папка, я не могу знать...

Удаление содержимого папки
Подскажите вариант решения: необходимо удалить содержимое папки (файлы, папки; много уровней вложенности), не трогая при этом саму...

Поиск папки и удаление ее содержимого
Всем привет)... Подскажите как реализовать в программе, поиск определенной папки?! Чтобы каждый раз программа ( Автоматически находила...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru