Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Borland C++ Builder

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 08.05.2007, 20:32   #1
Пользователь
 
Пол:Мужской
Регистрация: 27.01.2007
Адрес: Киев
Сообщений: 103
Репутация: 130
По умолчанию Нужен поиск файлов в директории

Здравствуйте! Мне нужно сообразить программку, которая ищет текстовые файлы в директории, в которых есть текст, указанный в строке для поиска. (Типа как в Windows поиск). Хоть намекните с чего начать.
Мешок вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: папу маме заверни фильм смотретьокружной дом офицеров самара - RedKassa.ruOZON эльбакоронка зубрешетка сетчатая 300*250


Старый 11.05.2007, 08:57   #2
Belkaw
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.05.2007
Сообщений: 5
Репутация: 2
По умолчанию Re: Нужен поиск файлов в директории

Вроде бы это можно сделать с помощью API функции, FindFirstFileExA(), правда, сейчас не помню у неё входных параметров.
Belkaw вне форума
 
Ответить с цитированием Вверх
Старый 11.05.2007, 21:59   #3
pluton
ViP
 
Аватар для pluton
 
Пол:Мужской
Регистрация: 23.02.2007
Сообщений: 1,027
Репутация: 560
По умолчанию Re: Нужен поиск файлов в директории

Цитата:
Сообщение от Мешок Посмотреть сообщение
Здравствуйте! Мне нужно сообразить программку, которая ищет текстовые файлы в директории, в которых есть текст, указанный в строке для поиска. (Типа как в Windows поиск). Хоть намекните с чего начать.

Начать с поиска файлов
Эта функция ищет первый файл в директории:
Код:
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
pluton вне форума
 
Ответить с цитированием Вверх
Старый 12.05.2007, 09:17   #4
donut
Новичок
 
Пол:Женский
Регистрация: 12.05.2007
Сообщений: 5
Репутация: 24
По умолчанию Re: Нужен поиск файлов в директории

Цитата:
Сообщение от pluton Посмотреть сообщение
Дальше: открываешь каждый найденный файл, и ищещь нужную строку. Можно попробовать с помошью функции
Код:
int __fastcall AnsiPos(const AnsiString& subStr) const;

Это слишком медленный метод, который к тому же не работает с большими файлами. Лучше (быстрее) сделать поиск с использованием mmap.
donut вне форума
 
Ответить с цитированием Вверх
Старый 12.05.2007, 10:54   #5
pluton
ViP
 
Аватар для pluton
 
Пол:Мужской
Регистрация: 23.02.2007
Сообщений: 1,027
Репутация: 560
По умолчанию Re: Нужен поиск файлов в директории

Цитата:
Сообщение от donut Посмотреть сообщение
Это слишком медленный метод, который к тому же не работает с большими файлами. Лучше (быстрее) сделать поиск с использованием mmap.

Да, можешь сделать с помощью Memory Mapped Files. Все подробности по юзанию в MSDN
__________________
THE TRUTH IS OUT THERE
pluton вне форума
 
Ответить с цитированием Вверх
Старый 12.05.2007, 12:22   #6
RanID
Неактивный пользователь
 
Пол:Мужской
Регистрация: 12.05.2007
Сообщений: 1
Репутация: 1
По умолчанию Re: Нужен поиск файлов в директории

Добрый день.

Мне когда-то помогла статья связанная с поиском текста в файле
http://netcode.ru/cpp/?lang=&katID=3...D=30&artID=272
RanID вне форума
 
Ответить с цитированием Вверх
Старый 12.05.2007, 19:56   #7
Мешок
Пользователь
 
Пол:Мужской
Регистрация: 27.01.2007
Адрес: Киев
Сообщений: 103
Репутация: 130
По умолчанию Re: Нужен поиск файлов в директории

Спасибо, ребята, я уже сделал. Совсем не так правда. Может и позорно, но я все равно не себе.
Делал с помощью DirectoryListBox, FileListBox из вкладки Win3.1 и Memo.
Мешок вне форума
 
Ответить с цитированием Вверх
Старый 09.01.2008, 10:31   #8
vlyakhovich
Неактивный пользователь
 
Регистрация: 09.01.2008
Сообщений: 1
Репутация: 0
По умолчанию Ответ: Нужен поиск файлов в директории

Попробуй через стандартные сишные функции findfirst, findnext
vlyakhovich вне форума
 
Ответить с цитированием Вверх
Старый 22.05.2008, 14:01   #9
webprogect
Неактивный пользователь
 
Регистрация: 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..
webprogect вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск файлов 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:45. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.05471 секунды с 11 запросами