Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880

Удаление не пустых папок

21.10.2014, 07:29. Показов 1990. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть программы:
1. Найти все Debug папки на диске D.
2. Запомнить адресса этих папок в list<wstring>.
3. Вывести в листбокс все файлы из всех Дебаг-папок.
4. При нажатии кнопки удаляем все папки Debug.
Так как удалять нужно не пустые папки я загуглил как это делается и нашел этот способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool DeleteFolders(list<wstring> * ListPath)
{
    int iRet;
    list<wstring>::iterator it;
    SHFILEOPSTRUCT fo;
    ZeroMemory(&fo, sizeof(fo));
    fo.fFlags = FOF_NOCONFIRMATION;
    fo.wFunc = FO_DELETE;
    for (it = ListPath->begin(); it != ListPath->end(); ++it)
    {
        fo.pFrom = it->c_str();
        iRet = SHFileOperation(&fo);
    }
 
 
    //wchar_t sPath[MAX_PATH] = L"D:\\66"; // вот так успешно была удалена папка
    //fo.pFrom = sPath;
 
    return 0;
}
Собственно результат был негативным, ничего не удалялось(
Так же мне сказали, что удалять нужно сначала каждый файл в папке, а потом уже пустую папку.
Жду ваши соображения...

П.С. или нужно новую тему создать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2014, 07:29
Ответы с готовыми решениями:

Удаление пустых папок
Здравствуйте! Нигде не нашел как рекурсивно удалить все пустые папки в по указанному пути. Т.е. проходить по всем папкам и под-папкам...

Удаление пустых папок и подпапок
Добрый день! Подскажите пожалуйста! Суть проблемы: у меня программа сортирует файлы. Выходными данными является папка в которой...

Удаление только пустых папок
Всем привет! Есть папка, а в ней еще несколько папок, в которых еще куча под папок. Некоторые из из папок пустые. Подскажите скриптик,...

13
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33185 / 21483 / 8231
Регистрация: 22.10.2011
Сообщений: 36,855
Записей в блоге: 12
21.10.2014, 10:32
Цитата Сообщение от andreyananas Посмотреть сообщение
Собственно результат был негативным, ничего не удалялось(
Собственно, нормально удалятся непустая папка этим кодом, только что проверил. Рассказывай, что вернулось в iRet...
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 15:48  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Собственно, нормально удалятся непустая папка этим кодом, только что проверил. Рассказывай, что вернулось в iRet...
iRet = 2
Что это значит?

Добавлено через 29 минут
Как должна заканчиваться строка (путь к папке)?

Добавлено через 8 минут
Удивительно.
Если прописываю какой то адрес прям в функции тогда эта папка успешно удаляется.
А так выбивает ошибку либо 2 либо 124...
При этом путь к папке передается правильный(.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33185 / 21483 / 8231
Регистрация: 22.10.2011
Сообщений: 36,855
Записей в блоге: 12
21.10.2014, 16:19
Цитата Сообщение от andreyananas Посмотреть сообщение
либо 124...
При этом путь к папке передается правильный
Windows с тобой не согласна:
DE_INVALIDFILES 0x7C The path in the source or destination or both was invalid.
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 16:29  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Windows с тобой не согласна:
Как должен заканчиваться путь к папке?
п.с. блин вечно у меня все как не у людей...

Добавлено через 25 секунд
а что значит 2?
0
 Аватар для oxyfat
68 / 65 / 21
Регистрация: 01.05.2014
Сообщений: 247
21.10.2014, 16:49
Цитата Сообщение от andreyananas Посмотреть сообщение
При нажатии кнопки удаляю папку "Debug", со-всем содержимом каталога.
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
int DirectoryDelete(TCHAR *Filename)
{
    if (GetFileAttributes(Filename)&FILE_ATTRIBUTE_DIRECTORY)
    {
        TCHAR svSrc[260];
        lstrcpyn(svSrc,Filename,259);
        svSrc[lstrlen(svSrc)+1]='\0';
        
        SHFILEOPSTRUCT shfos;
        memset(&shfos,0,sizeof(SHFILEOPSTRUCT));
        shfos.hwnd=GetDesktopWindow();
        shfos.wFunc=FO_DELETE;
        shfos.pFrom=svSrc;
        shfos.fFlags=FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOERRORUI|FOF_RENAMEONCOLLISION|FOF_SILENT;
        
        if (SHFileOperation(&shfos)!=0) {
            // Не удалось удалить каталог.
            return 1;
        }
    } else {
        // Не удалось удалить. Это не каталог.
        return 1;
    }
 
    // Каталог удален.
    return 0;
}
 
//
// Удаляю папку, вместе со всем содержимом:
//
int Result = DirectoryDelete( TEXT("Debug") );
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 18:11  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Windows с тобой не согласна:
Вот что я сделал
в Дебаге скопировал адрес который передает мой list<wstring> (при этом далее выбивает ошибку 2)
и вставил этот адрес отдельно:
C++
1
2
3
4
5
6
7
    for (it = ListPath->begin(); it != ListPath->end(); ++it)
    {
        wchar_t sPath[MAX_PATH] = L"D:\\OOP\\work\\Курсы С++\\Les_22 (Наследие, Паттерн BRIDGE)\\TETRIS";
        fo.pFrom = sPath;
        //fo.pFrom = it->c_str();
        iRet = SHFileOperation(&fo);
    }
Итог: удалило папку TETRIS (я на этой папке тестил удаление)
Вообщем меня уже бесит вся эта ситуация. Адрес прога находит правильный, да и по другому быть не могло ибо программа перед удалением выводит все содержимое этой папки в листбокс.
Но почему то адрес не воспринимается правильно, при передаче через list<wstring>...
Что же делать???(
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 18:21  [ТС]
Вот что происходит когда достаем адрес с list<wstring> и когда этот же адрес мы кидаем напрямую:
Миниатюры
Удаление не пустых папок   Удаление не пустых папок   Удаление не пустых папок  

0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
22.10.2014, 16:59  [ТС]
Без вашей помощи я в этой ахинее точно не разберусь. ПОМОГИТЕ

Добавлено через 1 час 34 минуты
все так же как и я не понимают в чем проблема?

Добавлено через 21 час 1 минуту
ап все еще актуально
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
28.10.2014, 13:27  [ТС]
АП ВСЕ ЕЩЕ АКТУАЛЬНО!!!!!!!!!!
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
30.10.2014, 23:26  [ТС]
Не понимаю, никто не может объяснить/помочь или какие то соображения/догадки написать, почему так происходит?????
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
31.10.2014, 04:28
Лучший ответ Сообщение было отмечено andreyananas как решение

Решение

Вообще-то, все написано на MSDN:
pFrom
Type: PCZZTSTR
Note This string must be double-null terminated.
A pointer to one or more source file names. These names should be fully qualified paths to prevent unexpected results.
Standard MS-DOS wildcard characters, such as "*", are permitted only in the file-name position. Using a wildcard character elsewhere in the string will lead to unpredictable results.
Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
2
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
31.10.2014, 15:49  [ТС]
Все заработало, спасибо.
Но почему раньше об этом не написали?)
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
31.10.2014, 16:49
Цитата Сообщение от andreyananas Посмотреть сообщение
Все заработало, спасибо.
Но почему раньше об этом не написали?)
Потому что невозможно прочитать и вникнуть в каждую тему, есть у людей другие дела навереное, вот дошла очередь и написали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2014, 16:49
Помогаю со студенческими работами здесь

Удаление пустых папок и подпапок
Ищу код для выполнения такой функции: В папке программы (либо указанной) найти все пустые директории и поддиректории (с...

Удаление пустых скрытых папок с подпапками
Хочется написать cmd-файл, который при запуске из какой то папки будет пробегаться по всем ее подпапкам и удалять пустые папки. Я нашел...

Удаление пустых папок в папке, не через xcopy
Есть папка &quot;input&quot; в ней куча папок... Надо удалить все пустые папки... Не через &quot;хсору&quot; желательно... Желательно удалить все...

Рекурсивное удаление пустых папок из заданной папки
Здравствуйте. Нужно удалить пустые папки из заданной папки со всем подпапками. Нашел этот код в интернете. Но он удалил только 1...

Поиск и удаление пустых папок, а также все вложенные пустые папки
Прошу люди гении, подскажите мне код на С++ для этой задачки. Я буду очень рад и благодарен вам.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru