Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234

как удалить папку?

04.10.2010, 16:38. Показов 4987. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в написаной програмке при нажатии на кнопку удаляются файлы из списка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{ PlaySound("Bladerunner Dance Mix.wav",NULL, SND_ASYNC);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
   AnsiString FileName="C:\\WINDOWS\\system32\\файл";
    DeleteFile(FileName);
   
              FileName="C:\\Program Files\\папка1\\папка2\\файл.exe";
              DeleteFile(FileName);
 
     Button1->Caption="Done";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//-----------------------------

но вот столкнулся с одной папкой которую незнаю как в нее попасть
а именно C:\Documents and Settings\(здесь имя юзера)\Application Data\прога
естественно что на разных компах (имя юзера) различно.
как могу определить имя юзера и перейти к папке "прога"?
C++
1
FileName="C:\\Documents and Settings\\(здесь имя юзера)\\Application Data\прога";
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2010, 16:38
Ответы с готовыми решениями:

Как удалить папку?
Подскажите как удалить папку. std::remove("d:\\test"); - не работает

Как удалить папку!?
Здравствуйте!Помогите пожалуйста с таким вопросом: Купил внешний жёсткий диск,всё вроде в порядке было,потом дал знакомому и всё!после...

Как удалить папку со старыми данными?
как удалить , папку со старыми данными, хочу поставить касперски, а старый McAfee не дает, нужно удалить, Удалить не получается,...

15
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
04.10.2010, 16:59
Цитата Сообщение от lifeforce Посмотреть сообщение
как могу определить имя юзера и перейти к папке "прога"?
Способ 1. Использовать WinAPI функцию GetUserName и составить нужную строчку.
Способ 2. Считать путь к папке Application Data из переменной среды %AppData%. Функцией, например, getenv или другой.
Способ 3. Поищите в реестре, возможно, программа при установке сохраняет нужную строчку в него и можно её полностью оттуда вытащить.

Мне больше всех второй нравится
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
04.10.2010, 22:02  [ТС]
спасибо за подсказку ! сейчас поэксперементирую

Добавлено через 13 минут
в реестре нет такого пути
третий способ отпадает

Добавлено через 4 часа 42 минуты
вот нашел
C++
1
2
3
4
5
 TCHAR szUserName[256];
DWORD dwSize = sizeof(szUserName);
GetUserName(szUserName, &dwSize);
//mem(szUserName);
ShowMessage(AnsiString(szUserName));
работает!
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 15:19  [ТС]
вот столкнулся с непоняткой
испытательна папка создана C:\Documents and Settings\Igor\Application Data\cansel\
программа компилится выпоняется , но когда нажмешь кнопку "удалить" пишет - (не удается удалить файл. Не удается произвести чтение из файла или с диска.)
винда без админ прав. удалить файл из той деректории , нет проблем.
вот код кнопки "удалить"
подскажите в чем может быть проблемма?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// обязательно ->  #define NO_WIN32_LEAN_AND_MEAN
 TCHAR szUserName[256];
 DWORD dwSize = sizeof(szUserName);
 GetUserName(szUserName, &dwSize);
AnsiString userfolder= "C:\\Documents and Settings\\"+(AnsiString(szUserName))+"\\Application Data\\cansel\0";
 // DeleteFile(userfolder);
 ShowMessage(AnsiString(userfolder)); //  
  SHFILEOPSTRUCT sh;
   sh.hwnd=Form1->Handle;
   sh.wFunc = FO_DELETE;  //
  //здесь вводим удаляемую папку "cansel"
 sh.pFrom = userfolder.c_str();//"C:\Documents and Settings\Igor\Application Data\\cansel\0";    
 sh.pTo = NULL;
   sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
   sh.hNameMappings = 0;
   sh.lpszProgressTitle = NULL;
   SHFileOperation(&sh);
     Button1->Caption="Done";
 
}
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
19.10.2010, 16:00
lifeforce, попробуйте вот так:
C++
1
2
3
4
5
6
7
8
9
 TCHAR szUserName[256];
 DWORD dwSize = sizeof(szUserName);
 GetUserName(szUserName, &dwSize);
AnsiString userfolder= "C:\\Documents and Settings\\"+(AnsiString(szUserName))+"\\Application Data\\cansel";
 // DeleteFile(userfolder);
 ShowMessage(AnsiString(userfolder)); //
 
 
     RemoveDir(userfolder);
Добавлено через 1 минуту
Хм... извините, ошибочка вышла. Этот код работать тоже не будет.

Добавлено через 7 минут
Хотя, нет. Будет. Кажется путь к папке задается неверно. Сейчас кое-чего попробую сделать... Да, работает нормально.
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 16:21  [ТС]
Папа Карло,
да при выполнении такой команды не выдает ошибки , но и не удаляет папку.

Добавлено через 1 минуту
или может надо ставить эти строки?
C++
1
2
3
4
5
6
7
8
9
10
 //SHFILEOPSTRUCT sh;
   //sh.hwnd=Form1->Handle;
  // sh.wFunc = FO_DELETE;
    // здесь вводим удаляемую папку "cansel"
 //sh.pFrom = userfolder.c_str();//"C:\Documents and Settings\Igor\Application Data\\cansel\0";//
 // sh.pTo = NULL;
 //  sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
 //  sh.hNameMappings = 0;
 //  sh.lpszProgressTitle = NULL;
 //  SHFileOperation(&sh);
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
19.10.2010, 16:36
lifeforce, а вот так не проще:
C++
1
2
3
4
char *Path = "C:\\Test";
if (RemoveDirectory(Path)) {
  ShowMessage("Folder was deleted successfully...");
}
???

Соответственно, папка должна быть пустой. Иначе, необходимо дополнительно удалить содержимое.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
19.10.2010, 16:39
lifeforce, не знаю. У меня удаляет нормально, вроде.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 17:00  [ТС]
пересмотрел каждую букву но так и нет нашел ошибки в именах.

MikeSoft,
сечас еще попробую вашу версию
но мне туда надо вставить имя юзера
но папка которую надо удалить содержит файлы
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
19.10.2010, 17:08
lifeforce, предварительно удаляйте все существующие файлы.

С именем пользователя проблем возникать не должно:
C++
1
2
3
4
5
6
7
8
TCHAR szUserName[MAX_PATH];
DWORD dwSize = sizeof(szUserName);
GetUserName(szUserName, &dwSize);
String Path = "C:\\Documents and Settings\\" + String(szUserName) + "\\Application Data\\Test";
 
if (RemoveDirectory(Path.c_str())) {
  ShowMessage("Folder was deleted successfully...");
}
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 17:18  [ТС]
очень странно но теперь удалил папку
C++
1
2
3
4
5
6
7
8
TCHAR szUserName[MAX_PATH];
DWORD dwSize = sizeof(szUserName);
GetUserName(szUserName, &dwSize);
String Path = "C:\\Documents and Settings\\" + String(szUserName) + "\\Application Data\\Test";
 
if (RemoveDirectory(Path.c_str())) {
  ShowMessage("Folder was deleted successfully...");
}
хотя этот код ничем не отличается от
C++
1
2
3
4
5
6
7
8
9
 TCHAR szUserName[256];
 DWORD dwSize = sizeof(szUserName);
 GetUserName(szUserName, &dwSize);
AnsiString userfolder= "C:\\Documents and Settings\\"+(AnsiString(szUserName))+"\\Application Data\\cansel";
 // DeleteFile(userfolder);
 ShowMessage(AnsiString(userfolder)); //
 
 
     RemoveDir(userfolder);
но последний код (папка не удалялась). хотя я перед последним эксперементом оставил папку пустой.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
19.10.2010, 17:21
lifeforce, в папке cancel есть каки-либо файлы? Если да, то все понятно.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 17:44  [ТС]
да получается что папка должна быть пустой.
но ведь я неслучайно нашел этот кусок програмки которая удаляет папку с ее содержимым.
C++
1
2
3
4
5
6
7
8
9
10
 SHFILEOPSTRUCT sh;
    sh.hwnd=Form1->Handle;
    sh.wFunc = FO_DELETE;
    // здесь вводим удаляемую папку "cansel"
 sh.pFrom = userfolder.c_str();//"C:\Documents and Settings\Igor\Application Data\\cansel\0";//
  sh.pTo = NULL;
   sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    sh.hNameMappings = 0;
   sh.lpszProgressTitle = NULL;
  SHFileOperation(&sh);
и работала и удаляла с любого каталога. но когда всталяю
C++
1
userfolder.c_str();
дает ошибку открытия файла
в оригинале была такая строка
C++
1
"C:\Documents and Settings\Igor\Application Data\\cansel\0";// здесь важный элемент( \0 )
чтоб удалить всю папку с ее содержимым
тогда соответственно я вношу такие изменения
C++
1
AnsiString userfolder= "C:\\Documents and Settings\\"+(AnsiString(szUserName))+"\\Application Data\\cansel\0";
но и опять таки не работает
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
19.10.2010, 17:45
Цитата Сообщение от lifeforce Посмотреть сообщение
хотя этот код ничем не отличается
Отличается функцией, выполняющей удаление (то есть, отличие существенное).

RemoveDirectory - стандартная функция, описанная в Winbase.h (который включён в Windows.h)
RemoveDir - описана в SysUtils.hpp и является приблудой в VCL библиотеке.

Однако, проверил, оба варианта работают отлично:
C++
1
2
3
4
5
6
7
8
TCHAR szUserName[MAX_PATH];
DWORD dwSize = sizeof(szUserName);
GetUserName(szUserName, &dwSize);
String Path = "C:\\Documents and Settings\\" + String(szUserName) + "\\Application Data\\Test";
 
if (RemoveDir(Path)) {
  ShowMessage("Folder was deleted successfully...");
}
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.10.2010, 18:38  [ТС]
да. работают оба варианта но только с пустыми папками .

Добавлено через 33 минуты
вот попробуйте эту часть програмки
C++
1
2
3
4
5
6
7
8
9
10
11
SHFILEOPSTRUCT sh;
   sh.hwnd=Form1->Handle;
   sh.wFunc = FO_DELETE;
    // здесь вводим удаляемую папку "cansel"
  //sh.pFrom = (userfolder.c_str());
 sh.pFrom = "C:\\Documents and Settings\\Igor\\Application Data\\cansel\0"; //здесь важный элемент \0
 sh.pTo = NULL;
   sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
   sh.hNameMappings = 0;
   sh.lpszProgressTitle = NULL;
   SHFileOperation(&sh);
и в папку cansel можно еще накидать папок и файлов , и все это удалится без проблем!
но когда сделаю так
C++
1
2
sh.pFrom = (userfolder.c_str());
//sh.pFrom = "C:\\Documents and Settings\\Igor\\Application Data\\cansel\0";//здесь важный элемент \0
и в строке добавлю \0
C++
1
AnsiString userfolder= "C:\\Documents and Settings\\"+(AnsiString(szUserName))+"\\Application Data\\cansel\0";
то при выполнении программы выдает ошибку не могу прочитать файл, даже если и папка пустая!
думаю что ошибка как раз и находится в этой строке
C++
1
sh.pFrom = userfolder.c_str();
0
 Аватар для Arnike
23 / 23 / 4
Регистрация: 26.12.2008
Сообщений: 142
12.03.2011, 21:34
Не совсем по теме но все таки лучше задать этот вопрос тут имеется код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    wchar_t ProgressT[100];
 
    String Path = ProgPath + "\\" + RzTreeView1->Selected->Text;
 
    SHFILEOPSTRUCT sh;
    sh.hwnd=Form1->Handle;
    sh.wFunc = FO_DELETE;
    sh.pFrom = Path.c_str();
    sh.pTo = NULL;
    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    sh.hNameMappings = 0;
    sh.lpszProgressTitle = ProgressT;
    SHFileOperation(&sh);
взятый собственно отсюда же)так вот каким образом можно отобразить процесс удаления на ProgressBar'е ?sh.lpszProgressTitle "подозрительно" подходящее название в данном вопросе)но что это... в общем рад любой помощи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2011, 21:34
Помогаю со студенческими работами здесь

Как удалить папку
Как написать программу, которая по заданному адресу будет удалять папку? Если можно приведите пример.

как удалить папку
Скажем в папке есть файлы, это понятно что сначало мы удаляем файлы, а потом удаляем саму папку, а если в этой папке есть еще пара...

Как удалить неудаляемую папку?
Случайно поставил в настройках автоматический поиск драйверов в windows 7, установились почти все драйвера, которые нужно и не нужно....

Как удалить папку Windows.old
Переустановил Вин7,система создала копию в Windows.old. Для чего она нужна,и как удалить её?

Как удалить папку из архива?
Необходимо удалить папку из архива jar или zip средствами java. Напишите порядок действий. Обязательно ли пересобирать архив?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru