![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Пользователь
![]() Пол:
Регистрация: 27.01.2007
Адрес: Киев
Сообщений: 103
Репутация: 130
|
Здравствуйте! Мне нужно сообразить программку, которая ищет текстовые файлы в директории, в которых есть текст, указанный в строке для поиска. (Типа как в Windows поиск). Хоть намекните с чего начать.
|
|
|
|
| Реклама: | папу маме заверни фильм смотреть | окружной дом офицеров самара - RedKassa.ru | OZON эльба | коронка зуб | решетка сетчатая 300*250 |
|
|
#2
|
|
Неактивный пользователь
Пол:
Регистрация: 11.05.2007
Сообщений: 5
Репутация: 2
|
Вроде бы это можно сделать с помощью API функции, FindFirstFileExA(), правда, сейчас не помню у неё входных параметров.
|
|
|
|
| Сказали спасибо: |
|
|
#3
|
|
Начать с поиска файлов ![]() Эта функция ищет первый файл в директории: Код:
HANDLE FindFirstFile( LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData ); Код:
BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData ); Код:
BOOL FindClose( HANDLE hFindFile ); Вот пример юзания этих функций (из MSDN): Код:
The following example calls FindFirstFile, FindNextFile, and FindClose to list the files in a specified directory.
Note that the only limitation on the number of files a directory can contain is the storage capacity of the disk.
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
DWORD dwError;
printf ("Target directory is %s.\n", argv[1]);
strncpy (DirSpec, argv[1], strlen(argv[1])+1);
strncat (DirSpec, "\\*", 3);
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid file handle. Error is %u\n", GetLastError());
return (-1);
}
else
{
printf ("First file name is %s\n", FindFileData.cFileName);
while (FindNextFile(hFind, &FindFileData) != 0)
{
printf ("Next file name is %s\n", FindFileData.cFileName);
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
{
printf ("FindNextFile error. Error is %u\n", dwError);
return (-1);
}
}
return (0);
}
Код:
int __fastcall AnsiPos(const AnsiString& subStr) const;
__________________
THE TRUTH IS OUT THERE |
|
|
|
|
| Сказали спасибо: |
|
|
#4
|
|||||||||||||||||||||||
|
Новичок
Пол:
Регистрация: 12.05.2007
Сообщений: 5
Репутация: 24
|
Это слишком медленный метод, который к тому же не работает с большими файлами. Лучше (быстрее) сделать поиск с использованием mmap. |
|||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#5
|
|||||||||||||||||||||||
Да, можешь сделать с помощью Memory Mapped Files. Все подробности по юзанию в MSDN
__________________
THE TRUTH IS OUT THERE |
||||||||||||||||||||||||
|
|
|
|
|
#6
|
|
Неактивный пользователь
Пол:
Регистрация: 12.05.2007
Сообщений: 1
Репутация: 1
|
Добрый день.
Мне когда-то помогла статья связанная с поиском текста в файле http://netcode.ru/cpp/?lang=&katID=3...D=30&artID=272 |
|
|
|
| Сказали спасибо: |
|
|
#7
|
|
Пользователь
![]() Пол:
Регистрация: 27.01.2007
Адрес: Киев
Сообщений: 103
Репутация: 130
|
Спасибо, ребята, я уже сделал. Совсем не так правда. Может и позорно, но я все равно не себе.
Делал с помощью DirectoryListBox, FileListBox из вкладки Win3.1 и Memo. |
|
|
|
|
|
#8
|
|
Неактивный пользователь
Регистрация: 09.01.2008
Сообщений: 1
Репутация: 0
|
Попробуй через стандартные сишные функции findfirst, findnext
|
|
|
|
|
|
#9
|
|
Неактивный пользователь
Регистрация: 22.05.2008
Сообщений: 3
Репутация: 0
|
HANDLE FindFirstFile(LPCTSTR lpFileName,
//имя файла(ов) который(е) ищем, можно использовать маску (*,?) LPWIN32_FIND_DATA lpFindFileData //структура которая будет содержит информацию о файле);Если произошла ошибка, то функция вернет значение INVALID_HANDLE_VALUE, иначе handle поиска.Структура WIN32_FIND_DATA содержит следующие элементы: dwFileAttributes – атрибуты файла(директории): FILE_ATTRIBUTE_ARCHIVE 0x00000020 файл или директория архивные FILE_ATTRIBUTE_COMPRESSED 0x00000800 файл или директория сжаты FILE_ATTRIBUTE_DIRECTORY 0x00000010 каталог FILE_ATTRIBUTE_ENCRYPTED 0x00000040 файл или директория зашифрованы FILE_ATTRIBUTE_HIDDEN 0x00000002 файл или директория скрыты FILE_ATTRIBUTE_NORMAL 0x00000080 файл или директория без атрибутов FILE_ATTRIBUTE_READONLY 0x00000001 только чтение FILE_ATTRIBUTE_SYSTEM 0x00000004 файл или директория системные FILE_ATTRIBUTE_TEMPORARY 0x00000100 файл или директория временные ftCreationTime – время создания ftLastAccessTime – время последнего открытия ftLastWriteTime – время последнего изменения nFileSizeLow – размер файла cFileName – имя файлаДля продолжения поиска необходима функция FindNextFile:BOOL FindNextFile( HANDLE hFindFile, //handle поискаLPWIN32_FIND_DATA lpFindFileData //указатель на структуру с информацией о файле);Если нет ошибок функция возвращает не нулевое значение. Для нахождения текущей директорииможно воспользоваться функцией GetCurrentDirectory:DWORD GetCurrentDirectory(DWORD nBufferLength, //размер буфераLPTSTR lpBuffer //указатель на буфер );Теперь сам код, используется Visual C++ 6.0, создаем Win32 Console Application. #include <iostream.h> #include <windows.h> int main() { WIN32_FIND_DATA winFileData; HANDLE hFile; char szPath[MAX_PATH]; if(GetCurrentDirectory(sizeof(szPath),szPath)) { cout<<szPath<<endl; lstrcat(szPath,"\\*.*"); hFile = FindFirstFile(szPath,&winFileData); if (hFile!=INVALID_HANDLE_VALUE) { do { cout<<winFileData.cFileName<<endl; } while (FindNextFile(hFile,&winFileData)!=0); FindClose(hFile); } } return 0; } Последний раз редактировалось webprogect; 22.05.2008 в 14:03.. |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| поиск файлов | myltik | Архив | 5 | 10.02.2010 16:34 |
| Поиск дубликатов файлов | sferanet | Варезник | 1 | 30.03.2009 09:07 |
| Поиск не видит файлов | djXandr | Mac Os X | 1 | 16.09.2008 21:05 |
| Нужен загрузчик сайтов, с возможностью выбора начальной директории. | Lighttt | Архив | 7 | 13.07.2007 02:31 |
| Windows XP - Умер поиск файлов | teplotaya | Архив | 6 | 01.05.2006 09:36 |
|
|