![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
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()... А вот какого типа должны быть переменные, и сколько мне их понадобиться, и как их объявлять я не представляю ![]() Поможите кто чем может! Пожалуйста! Это сообщение отредактировал(а) Eugene82 - 30.5.2005, 20:31 |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Как получить список файлов в папке, смотри в FAQ.
Далее тебе надо просто разбирать строку: ищешь "." в имени файла, смотришь что после неё и выполняешь необход. действия:
Это сообщение отредактировал(а) gepard - 31.5.2005, 05:07 -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Eugene82 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
2gepard Спасибо. То что нужно. Но плюс поставить пока не способен - постов мало.
Это сообщение отредактировал(а) Eugene82 - 1.6.2005, 10:52 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
ищешь "." в имени файла смотришь что после неё если нашел точку, возвращаешься на предыдущий шаг выполняешь необход. действия -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Eugene82 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Чувствую, что проблем ещё будет много, а создавать для каждой своей "детской" проблемы отдельную тему не хочу. Не люблю флудить
![]() Подскажите, какого вида на входе CPP-FAQ-002435 должны быть значения переменных path, mask? Я недавно узнал ( ![]()
В связи с эти возник вопрос: Как правильно присвоить значение const char, указателю на char? Не уверен, что вопрос правильный поэтому привожу в пример кусочек кода:
а как написать правильно? |
||||
|
|||||
Eugene82 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
C вопросом "Как присвоить указателю значение?" разобрался:
Кстати, что с этим кодом может быть не так? Выдаёт значение path в виде: буква_дискаal- - откуда и почему появились последние 3 символа? Снова неверное преобразование? И ведь ещё двоеточие после буквы диска должно быть! Подскажите, как вставить это двоеточие в путь? -------------- Разобрался со всеми вышеописанными проблемами благодаря _hunter. Завтра буду мучать удаление найденных файлов... ![]() Это сообщение отредактировал(а) Eugene82 - 3.6.2005, 19:24 |
|||
|
||||
Eugene82 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Это если использовать StrScan(), которая возвращает уазатель на первый найденный символ, но ведь можно использовать StrRScan(), которая возвращает указатель на последний найденный символ в строке. Тогда проверка на единственность точки в файле не нужна:
Я правильно рассудил? И таким же макаром мне надо определить расширение теперь? И ещё. Вопрос знатокам ОС Windows: Будет ли прорамма ищущая файлы *.BAK находить файлы *.bak? |
||||
|
|||||
Eugene82 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Появилось две идеи реализации проги:
1. Передавать в переменной mask в FindDir() "*.*", а потом разбором строки определять, что находиться в расширении. 2. Передавать в переменной mask в FindDir() сразу необходимые мне расширения "*.bak", "*.$$$" и т.д. Или даже в самой FinDir() запустить ещё одну рекурсию для смены расширений. Что будет рациональнее: - с позиции использования ресурсов компа, - с позиции написания небольшого/несложного кода? Какой вариант будет оптимальным, если я для выбора расширений пользователем добавлю на форму чекбоксы? ------------ И Edit для ввода собственого расширения. Это сообщение отредактировал(а) Eugene82 - 5.6.2005, 16:57 |
|||
|
||||
Eugene82 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Решил что вариант первый более приемлим, хотя файлы типа: *.BaK удалятся не будут - иначе придётся все варианты прописывать. И поскольку файлы типа *.bak создаются приложениями автоматически, то я оставил поверку только *.bak и *.BAK, ну и *.$$$ конечно (хорошо что с последним вариантов нет
![]() Моя программа уже удаляет файлы. Но так тихо и незаметно (а мне для курсовой надо чтобы результаты работы было видно или до удаления файлов, или хотя бы в виде лога), что я всё таки хочу сначала вывести файлы в список. Хочу вывести найденные файлы в имеющийся FileListBox1:
Есть вариант:
И вообще как можно вывести список найденых файлов? Ещё желательно в активный компонент, а не какой-нить Label! |
||||
|
|||||
Eugene82 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Понял, что FileListBox для моих целей не подходит. Заменил его на простой ListBox. Научил программу выводить в него найденные файлы - файлы выводятся с полным путём.
Теперь надо реализовать удаления файлов(!!!) по сответствующим выделенным строкам. Проблема первая: В выделении может быть более одной строки. Т.е надо создать массив и поместить в него выделенные строки. А потом передавать по одному элементу в DeleteFile(). Как создать массив и поместить в него выделенные строки? Проблема вторая (может саморазрешиться после решения первой?): Тип строк ListBox TString, а тип аргумента для DeleteFile() есть AnsiString. Как преобразовать TString в AnsiString? |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
У тебя список строк уже есть массив, причем у выбранных строк Selected = True...
Заведи под это дело переменную типа AnsiString и копируй nels имя с явным либо неявным (буде можно) приведением. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Eugene82 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
2Akina Готов расцеловать!!!
![]() ![]() Сначала хотел спросить, что такое "nels имя", но подумал, что возможно ты не пользуешься програми типа Punto Switcher и "nels" есть "туды" ![]() Реализовал кнопочку Delete. Первоначальный вариант был, как ты и советовал:
Но проверил и следующий вариант воплотился в код ![]()
Спасибо огромное!!! ![]() ![]() Это сообщение отредактировал(а) Eugene82 - 9.6.2005, 18:59 |
||||
|
|||||
Eugene82 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
В части б) задания необходимо находить файлы с расширением exe. Написаная мною программа уже умеет находить файлы с заданым расширением.
Как теперь мне из имени файла взять всё кроме расширения? Дано: AnsiString str1 = "filename.ext" Надо получить: AnsiString str2 = "filename" |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
Если заведомо расширение ЕХЕ - кто мешает от строки откусить последние 4 байта?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Eugene82 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
_hunter мне так и сказал:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |