Вопрос № 173878: Добрый день Уважаемые эксперты. У меня появилась довольно непонятная задача. Пожалуйста помогите хоты бы шаблон написать как программу написать, с чего начать. Пытался выполнять примеры, что даны в теории, не выходило. Компилятор Borland C++ ...
Вопрос № 173878:
Добрый день Уважаемые эксперты. У меня появилась довольно непонятная задача. Пожалуйста помогите хоты бы шаблон написать как программу написать, с чего начать. Пытался выполнять примеры, что даны в теории, не выходило. Компилятор Borland C++ Builder 6 Заранее благодарен. Задание и теория в приложении. Если с этого файлового обменика тяжело скачать подскажите другой, я загружу на него.
Отвечает Verena, Профессионал :
Здравствуйте, Dimon4ik. С некоторыми усилиями написала пример в Borland-е (не люблю я его), у меня отрабатывает корректно. Я сделала поиск заданного файла в папке и всех её подпапках в глубину, если Вам нужно только первый уровень рассмотреть, просто уберите рекурсию или ограничьте её одним заходом. Для поиска по папке я воспользовалась WinAPI-функциями FindFirstFile, FindNextFile, FindClose. Функция FindFirstFile создаёт описатель "поиск" (возвращаемое значение) и начинает поиск файлов и
папок в заданной директории, соответствующих определённой маске. Продолжать поиск следует через функцию FindNextFile, которая работает с уже существующим описателем и возвращает bool-значение, показывающее, найдено ли ещё что-то в директории. После окончания поиска его следует закрыть функцией FindClose. HANDLE FindFirstFile( LPCTSTR lpFileName, //Директория для поиска и маска, по которой следует отбирать найденное LPWIN32_FIND_DATA lpFi
ndFileData //Информация о найденном файле/папке );
BOOL FindNextFile( HANDLE hFindFile, //Описатель, созданный FindFirstFile LPWIN32_FIND_DATA lpFindFileData //Информация о найденном файле/папке );
BOOL FindClose( HANDLE hFindFile //Описатель, созданный FindFirstFile );
lpFileName - здесь передаётся существующий путь и имя файла (или маска), т.е. после указания пути можно задать фильтр поиска
при помощи символов '*' (любое количество любых символов) и '?' (один любой символ). Например, для поиска всех файлов можно задать маску *.* - любое имя файла с любым расширением (в данном случае фильтр также пройдут . и .. - указатели на родительскую и корневую директории). lpFindFileData - указатель на структуру WIN32_FIND_DATA следующего вида: typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; //Аттрибуты фа
йла FILETIME ftCreationTime; //Время создания FILETIME ftLastAccessTime; //Время последнего открытия FILETIME ftLastWriteTime; //Время последней записи DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; //Имя файла TCHAR cAlternateFileName[14]; //Альтернативное имя файла } WIN32_FIND_DATA, *PWIN32_FIND_DATA; Это возвращаемое значение, из этой структуры мы можем получить всю необходимую
информацию о найденном файле или папке. К тому же, по первому полю этой структуры (dwFileAttributes) мы можем узнать, к примеру, файл или папку мы нашли. Можно почитать об этом в MSDN: FindFirstFile, FindNextFile, FindClose. Код в приложении, всё должно быть ясно из комментариев. Удачи! PS: WinAPI - грубо говоря, набор базовых функций для приложений под Windows.
Приложение:
----- Эта история - не для истории, понимаешь?
Ответ отправил: Verena, Профессионал
Ответ отправлен: 01.11.2009, 17:48
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256084
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.