![]() |
|
|
![]()
|
|
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
К сессии (13.06.2005) надо написать прогу "Чистка диска" Cреда Borland C++ Builder 6 Исходные данные и основные требования: Написать программу, которая а) будет удалять с указанного устройства все файлы, имеющие расширения BAK и $$$; б) будет удалять с указанного устройства все файлы имеющие расширения EXE, если кроме этого будет существовать в этом каталоге и файл с таким же именем, но с расширением PAS ( или BAS, или C, или FOR), за исключением файлов с именем TURBO. ----- Почитав мануалы и проч. описания на русском, какие смог найти (с английским плохо к собственному стыду), так же пошарив поиском по Инету и найдя исходник похожей проги, но только на Visual C++ (что большой помощи мне не оказало), убедился, что задача довольно конретная и, привыших абстрагироваться по полной программеров, мало интересует. Начал юзать англоязычный хелп. Даже узнал что мне нужно использовать функции FindFirst(), FindNext(), и FindClose(). Про эти функции в моих русскоязычных мануалах ни слова! Я даже алгоритм слегка вкурил: Есть у меня на форме DriveComboBox, из которого в переменную должно записываться имя диска, есть две кнопочки Search и Delete, по которым соответственно должны вызываться функции FindFirst() и DeleteFile()... А вот какого типа должны быть переменные, и сколько мне их понадобиться, и как их объявлять я не представляю Поможите кто чем может! Пожалуйста! |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
поиск по словам FindFirst / FindNext на этом форуме тебе поможет
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Поиск помогает. Спору нет. Но постоянно появляются новые вопросы! Вот например: Есть фукнция FindDir(char* path,char* mask) {} Есть значение свойства Drive объекта DriveComboBox1 типа const char Вопрос: Как присвоить path значение (Drive + двоеточие)? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
приведи обоих к ансиСтрингу
типа AnsiString fullPath = AnsiString(path) + AnsiString(Drive) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Но ведь в FindDir() path определен как char* и компилятор выдаёт Cannot convert 'AnsiString' to 'char *' или 'AnsiString *' to 'char *'! |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
покажи код ( которым ты пытаешся конвертить )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Мне кстати, не AnsiString(path) с AnsiString(Drive) надо складывать! Мне нужно было AnsiString(Drive) + ":" и присвоить это path! Который char* А AnsiString в char* не конвертируется Я решил пойти другим путём:
|
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а... т.е. ты в FindDir() хочеш char* передать?
не соасем понятно зачем, ну да ладно... у AnsiString есть такой полезный метод -- c_str() но для указателей и этот способ пойдет. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Можно про использование метода c_str() поподробнее? Какую билиотеку ещё надо подключить? dsrting.h подключена.
И ещё. Почему после передачи значения drive по ссылке оно изменилось? Была просто буква диска, а во время выполнения функции FindDir drive принимает значение: буква_дискаal-- Поэтому условие (hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE всегда равно false |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
потому как терминатор не ставиш ( нулевой символ )
или еще подрбней? больше ничего подключать не нужно. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Хотел попросить пример использования
Большое спасибо, _hunter! У меня аж настроение поднялось! Завтра буду вывод списка мучать или сразу удаление найденных файлов. |
|||
|
||||
| Eugene82 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Вот и дошёл я до вывода списка...
Хочу вывести найденные файлы в имеющийся FileListBox1:
Есть вариант:
Это сообщение отредактировал(а) Eugene82 - 5.6.2005, 15:57 |
||||
|
|||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Понял, что FileListBox для моих целей не подходит. Заменил его на простой ListBox. Научил программу выводить в него найденные файлы - файлы выводятся с полным путём.
Теперь надо реализовать удаления файлов(!!!) по сответствующим выделенным строкам. Проблема первая: В выделении может быть более одной строки. Т.е надо создать массив и поместить в него выделенные строки. А потом передавать по одному элементу в DeleteFile(). Как создать массив и поместить в него выделенные строки? Проблема вторая (может саморазрешиться после решения первой?): Тип строк ListBox TString, а тип аргумента для DeleteFile() есть AnsiString. Как преобразовать TString в AnsiString? ----------------------- Реализовал часть a) задания. Осталась часть б). Это сообщение отредактировал(а) Eugene82 - 6.6.2005, 14:45 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
береш вектор и обзываещ какую-нить переменную std::vector<AnsiString> и все.
у ListBox' a кажись TStrings... а если обратится по индексу -- получим строку Strings[i] -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
_hunter Спасибо, но я уже сделал проще:
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |