Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891

Удаление текущего (выбранного) каталога

26.11.2009, 18:07. Показов 4411. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, возникла следующая проблема.
Работаю с реальной файловой системой, использую компонент DirectoryListBox. Необходимо удалять выбранный каталог, но ничего не выходит - просто ничего не происходит...( Вроде бы все логично прописано... В чем может быть трабла? Посмотрите, пожалуйста...
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::RemoveDir(TObject *Sender){
 
      char current_dir[MAXPATH];    // Константа MAXPATH задает максимальный размер пути для каталога
      getcwd (current_dir, MAXPATH);                // Запоминаем текущий каталог
      // Для удаления каталога
      // возвращаемся в каталог более высокого уровня
      chdir (current_dir);
      rmdir (current_dir);
 
 
      DirectoryListBox1->Update();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2009, 18:07
Ответы с готовыми решениями:

Получение строки текущего выбранного элемента ComboBox
Вопрос в теме - в комбобоксе несколько элементов, при выборе одного из них я хочу получить текст только этого элемента, как это сделать? ...

Список файлов выбранного каталога
Добрый вечер Данный код загружает путь выбранного каталога: .h #include <FileCtrl.hpp> .cpp String Directory; if...

Просмотр мониторинга изменений файлов выбранного каталога
Все привет! :) Разработать программу-диспетчер операционной системы для ОС Windows, который должен обеспечивать Просмотр мониторинга...

15
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
26.11.2009, 18:13
AFAIR сперва необходимо из каталога удалить все файлы...возможно в этом проблема? функцию кинуть?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
void MyDelete (AnsiString Dir, AnsiString tmp)
{
TSearchRec SR;
int ires;
ires = FindFirst(Dir + tmp, faAnyFile, SR);
while (ires==0)
    {
    DeleteFile(Dir + SR.Name);
    ires=FindNext(SR);
    }
FindClose(SR);
}
сперва надо сделать
MyDelete(путь к папке, "*.*");
а потом уже
RmDir();
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
26.11.2009, 20:11  [ТС]
sh4d°_°ff, выдает следующую ошибку на 8ую строчку: [C++ Error] Unit1.cpp(713): E2085 Invalid pointer addition
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::RemoveDir(TObject *Sender){
 
      char current_dir[MAXPATH];    // Константа MAXPATH задает максимальный размер пути для каталога
      getcwd (current_dir, MAXPATH);                // Запоминаем текущий каталог
      char *tmp ="*.*";
      TSearchRec SR;
      int ires;
      ires = FindFirst(current_dir + tmp, faAnyFile, SR);
      while (ires==0)
        {
        DeleteFile(current_dir + SR.Name);
        ires=FindNext(SR);
        }
      FindClose(SR);
 
      rmdir (current_dir);
 
      DirectoryListBox1->Update();
 
}
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
26.11.2009, 20:20
а зачем так то?
МуДелет

void MyDelete (AnsiString Dir, AnsiString tmp)
{
TSearchRec SR;
int ires;
ires = FindFirst(Dir + tmp, faAnyFile, SR);
while (ires==0)
{
DeleteFile(Dir + SR.Name);
ires=FindNext(SR);
}
FindClose(SR);
}
в *.h файл в секцию private, а потом уже в cpp где угодно подряд...

MyDelete(путь к папке, "*.*");
RmDir();

да ИМО для пути лучше использовать AnsiString (по крайней мере у меня так сделано и все робит)

з.ы.: кстати #include <dir.h>!!!
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
26.11.2009, 20:47  [ТС]
sh4d°_°ff, сделал как вы сказали... Дело в том что функция, которая получает текущий каталог (getcwd), работает только с чаром... Ну я вроде конвертирую Энси в чар с по. c_str() и все равно ругается (22ая строчка):
[C++ Error] Unit1.cpp(750): E2294 Structure required on left side of . or .*
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
void MyDelete (AnsiString Dir, AnsiString tmp)
{
TSearchRec SR;
int ires;
ires = FindFirst(Dir + tmp, faAnyFile, SR);
while (ires==0)
{
DeleteFile(Dir + SR.Name);
ires=FindNext(SR);
}
FindClose(SR);
}
 
 
 
 
void __fastcall TForm1::Button13Click(TObject *Sender){
 
 
      DirectoryListBox1->Update();
      AnsiString current_dir[MAXPATH];
      getcwd (current_dir.c_str(), MAXPATH);
      MyDelete(current_dir,"*.*");
      RmDir(current_dir);
 
}
Добавлено через 10 минут
Вот попробовал иначе, вроде без ошибок, но RmDir опять-таки ничего не удаляет..
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button13Click(TObject *Sender){
      char current_dir[MAXPATH];
      getcwd (current_dir, MAXPATH);
      String d = AnsiString(current_dir);
      MyDelete(d,"*.*");
      RmDir(d);
      DirectoryListBox1->Update();
 
}
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
26.11.2009, 21:06
C++
1
2
3
4
5
6
7
8
9
10
11
12
      DirectoryListBox1->Update();
      char current_dir[MAXPATH];    // Êîíñòàíòà MAXPATH çàäàåò ìàêñèìàëüíûé ðàçìåð ïóòè äëÿ êàòàëîãà
      getcwd (current_dir, MAXPATH);                // Çàïîìèíàåì òåêóùèé êàòàëîã
      // Äëÿ óäàëåíèÿ êàòàëîãà
      // âîçâðàùàåìñÿ â êàòàëîã áîëåå âûñîêîãî óðîâíÿ
      DirectoryListBox1->Update();
      AnsiString S=DirectoryListBox1->Directory;
      MyDelete(S+"\\","*.*");
      chdir (current_dir);
      DirectoryListBox1->Update();
      RmDir(S);
      DirectoryListBox1->Update();
вот так чистит но не удаляет саму папку, надо подумать еще....

Добавлено через 5 минут
вот рабочий код:

C++
1
2
3
4
5
      AnsiString S=DirectoryListBox1->Directory;
      DirectoryListBox1->ItemIndex=DirectoryListBox1->ItemIndex-1;
      DirectoryListBox1->OpenCurrent();
      MyDelete(S+"\\","*.*");
      RmDir(S);
2
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
28.11.2009, 12:45  [ТС]
sh4d°_°ff, огромнейшее спасибо! Очень помог!
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
21.12.2009, 15:26
C++
1
S=DirectoryListBox1->Directory;
Это действие выполняет присвоение текущей папки переменной S?
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
21.12.2009, 15:29
Да
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
21.12.2009, 15:41
C++
1
2
3
4
5
AnsiString S=DirectoryListBox1->Directory;                           //присваивает текущую папку  
DirectoryListBox1->ItemIndex=DirectoryListBox1->ItemIndex-1;//делает число папок на одну меньше
DirectoryListBox1->OpenCurrent();                                      //открывает текущую папку
MyDelete(S+"\\","*.*");                                                     //удаляет текущую папку
RmDir(S);                                                                        //а это что делает?
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
21.12.2009, 16:36
не так

C++
1
2
3
4
5
6
1
AnsiString S=DirectoryListBox1->Directory;                           //присваивает текущую папку  
DirectoryListBox1->ItemIndex=DirectoryListBox1->ItemIndex-1;//выбирает предыдущую папку
DirectoryListBox1->OpenCurrent();                                      //открывает ее
MyDelete(S+"\\","*.*");                                                     //чистит текущую папку (удаляет все из нее)
RmDir(S);                                                                        //удаляет саму текущую папку
1
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
22.12.2009, 15:44
Можно ли программно переменной задать конкретный путь к папке? То есть что то например C:\Test\First
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
22.12.2009, 15:48
конечно можно.. только ты имеешь ввиду задать для компонента или для перевенной (или еще для чего)?... короче она должна быть типа String/AnsiString и иметь вид "C:\\Test\\First"
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
22.12.2009, 16:02
Имею ввиду так:

C++
1
AnsiString G="C:\\Test\\First";
=======================================

C++
1
2
AnsiString S="C:\\TEST\\ERT";
RmDir(S);
Не удаляет заданную папку... ааа надо сначала очистить содержимое этой папки?
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
22.12.2009, 16:09
да сперва надо сделать
C++
1
MyDelete(S+"\\","*.*");
1
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
23.12.2009, 13:16
Так, точно надо сначала содержимое папки очищать. Получилось. Теперь надо заценить, удалит ли пустую папку...

Всё работает! Спасибо!

Добавлено через 24 минуты
А вот папку C:\\Documents and Settings\\scanman\\Local Settings\\History не хочет очищать...

Добавлено через 20 часов 39 минут
Папку эту History очищает, но остаётся вот такая директория - History.IE5
В ней в основном файлы index.dat... Их нельзя удалить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2009, 13:16
Помогаю со студенческими работами здесь

Переслать файл file2.txt из текущего каталога в подкаталог S2 и скопировать в S3
Задание: Переслать файл file2.txt из текущего каталога в подкаталог S2 и скопировать в S3. Прочитать содержимое S1, S2, S3 и отобразить его...

Удаление каталога C++ Builder
Доброго времени суток! У меня возникла проблема. Хочу удалить папку по нажатию кнопки, вроде бы всё работает, НО! Вот так всё работает ...

Запуск и удаление исполняемых файлов из каталога
Здравствуйте. Помогите пожалуйста разобраться в некоторых местах кода. Полное задание: unit.cpp : ...

Удаление файлов текущего каталога, имена которых начинаются с буквы, указанной в качестве параметра
Нужно попытаться удалить файлы текущего каталога, имена которых начинаются с буквы, указанной в качестве параметра. Для каждого файла в...

Сделать подсветку текущего выбранного меню
банально, есть обычная менюшка навигации сайта, нужно сделать подсветку текущего выбранного меню (просто добавить класс,ну и...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru