Форум программистов, компьютерный форум CyberForum.ru

Программа для поиска файлов - C++

Восстановить пароль Регистрация
 
David_Ok
 Аватар для David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
13.07.2015, 13:35     Программа для поиска файлов #1
Ребят хочу вылезти из типичных примеров в книгах и написать прогу для поиска файлов хоть бы самую приметивную.

Ища в нэте ничего толкового не нашел.

Мог бы кто-то объяснить словами как это выглядит и по возможности хоть несколько строк кода черкануть.

Спасибо
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
13.07.2015, 14:15     Программа для поиска файлов #2
Чего не нашёл? Какими функциями искать? FindFirstFile(), FindNextFile().
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,570
Записей в блоге: 17
13.07.2015, 22:38     Программа для поиска файлов #3
boost::filesystem ?
David_Ok
 Аватар для David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
14.07.2015, 12:32  [ТС]     Программа для поиска файлов #4
Цитата Сообщение от nmcf Посмотреть сообщение
Чего не нашёл?
Не нашел где бы объяснялась работа ф-ций и программы в целом, но сейчас уже нашел пару ссылок и пытаюсь разобратся

Добавлено через 9 минут
Мог бы кто-то помочь разобраться, а то есть масса вопросов

C++
1
2
3
4
5
HANDLE FindFirstFile
(
    LPCTSTR lpFileName,     // какой файл ищем можно указывать маску *, ?
    LPWIN32_FIND_DATA lpFindFileData    // указатель на структуру с информацией
);
Вот эта ф-ция, то что я предоставил выше это прототип ф-ции ? А в самой ф-ции должен еще вызываться поиск ?

Был бы кто то добр предоставить короткий код что бы по заданному имени нашло первый файл ф-цией FindFirstFile ?
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
14.07.2015, 12:37     Программа для поиска файлов #5
Полный проект: Есть очень много маленьких текстовых файлов необходимо слить в один файл
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
14.07.2015, 13:00     Программа для поиска файлов #6
Вот пример, считает объём файлов в каталоге, но суть та же.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 #include <cstdlib>
 #include <iostream>
 #include <string>
 #include <locale>
 #include <windows.h>
 
 
 using std::locale;
 using std::wstring;
 using std::wcin;
 using std::wcout;
 
 int main()
 {
    wcout.imbue(locale("rus_RUS.866"));
    wcin.imbue(locale("rus_RUS.866"));
 
    wstring path;
    wcout << L"Каталог (c \\ в конце): ";
    std::getline(wcin, path);
 
    unsigned long long sz = 0;
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
 
    hFind = FindFirstFileW((path + L"*.*").c_str(), &FindFileData);
    while (hFind != INVALID_HANDLE_VALUE)
    {
        if (wcscmp(FindFileData.cFileName, L".") != 0 && wcscmp(FindFileData.cFileName, L"..") != 0
                && (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
        {
            unsigned long long fsz = (unsigned long long)FindFileData.nFileSizeHigh * (MAXDWORD + 1LL) + FindFileData.nFileSizeLow;
            sz += fsz;
            wcout << FindFileData.cFileName << L"\t\t" << fsz << std::endl;
        }
 
        if (!FindNextFileW(hFind, &FindFileData))
        {
            FindClose(hFind);
            break;
        }
    }
 
    wcout << std::endl << L"Всего: " << sz << L" байт" << std::endl;
 
     std::cout << std::endl;
     system("pause");
 }
David_Ok
 Аватар для David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
14.07.2015, 13:58  [ТС]     Программа для поиска файлов #7
Всем спасибо за помощь.

Вот что успел наляпать,
но есть вопрос по поводу char *argv[], чето оно не компилирует, ошибка на декларации, и путь к файлу нужно записывать в массив под №1(argv[1]) ?

Можете поправить ошибки пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
 
using namespace std;
 
int main()
{
char *argv[];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
 
cout<<"Enter the path to the file: ";
cin>>argv[1];
 
hFind = FindFirstFile(argv[1], &FindFileData);
 
if (hFind == INVALID_HANDLE_VALUE)
  {
    cout<<"Invalid File Handle. GetLastError reports\n"<<GetLastError ();
    return (0);
  }
   else
    {
    cout<<"The first file found is \n"<<FindFileData.cFileName;
    FindClose(hFind);
    return (1);
    }
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.07.2015, 14:35     Программа для поиска файлов #8
Почему бы не использовать boost?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <boost/filesystem.hpp>
 
namespace fs = boost::filesystem;
 
int main()
{
   const std::string file = "test.txt";
   std::vector<fs::path> pathes {fs::recursive_directory_iterator(fs::current_path()), {}};
   std::vector<fs::path> res;
 
   std::copy_if(pathes.cbegin(), pathes.cend(), std::back_inserter(res), [&](const fs::path &p)
   {return fs::is_regular_file(p) && p.filename().string() == file;});
 
   for (auto &p : res) std::cout << p << "\n";
}
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,570
Записей в блоге: 17
14.07.2015, 14:44     Программа для поиска файлов #9
DiffEreD, только не стоит забывать ловить исключения, а то при поиске на диске C будут проблемы.
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
14.07.2015, 14:57     Программа для поиска файлов #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <windows.h>
#include <stdio.h>
 
static DWORD   dwKeepError;
 
static void Error()
{
   char*    pBuf = NULL;
 
   FormatMessage
   (
      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,   // Source and Processing Options
      NULL,                                                          // Pointer to Message Source
      dwKeepError,                                                   // Requested Message Identifier
      MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),                      // Language Identifier for Requested Message
      (LPTSTR)&pBuf,                                                 // Pointer to Message Buffer
      0,                                                             // Maximum Size of Message Buffer
      NULL                                                           // Address of Array of Message Inserts
   );
 
   MessageBox(GetActiveWindow(),pBuf,"Error",MB_OK | MB_ICONSTOP);
 
   LocalFree(pBuf);
}
 
int main(int argc,char** argv)
{
   WIN32_FIND_DATA      FindData;
   HANDLE               hFind;
 
   memset(&FindData,0,sizeof(WIN32_FIND_DATA));
 
   hFind = FindFirstFile("*.cpp",&FindData);
 
   dwKeepError = GetLastError();
 
   if (hFind == INVALID_HANDLE_VALUE)
   {
      Error();
      return -1;
   }
 
   puts(FindData.cFileName);
 
   FindClose(hFind);
 
   return 0;
}
Raali
14.07.2015, 15:59
  #11

Не по теме:

Цитата Сообщение от David_Ok Посмотреть сообщение
Ребят хочу вылезти из типичных примеров в книгах и написать прогу для поиска файлов хоть бы самую приметивную.
В итоге за тебя все сделали

David_Ok
 Аватар для David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
15.07.2015, 14:34  [ТС]     Программа для поиска файлов #12
gazlan, огромное спасибо за помощь!

Но! Есть вопрос, почему я не могу сделать так
C++
1
2
3
4
string name;
cout<<"Enter the path to the file: ";
cin>>name;
hFind = FindFirstFile(name, &FindFileData);
когда вызываю ф-цию FindFrstFile с переменной name выдает ошибку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 14:37     Программа для поиска файлов
Еще ссылки по теме:

Программа для поиска минимального и максимального значения массива C++
Программа для поиска файлов C++
Программа для поиска максимального куска строки кратного 143 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,843
Записей в блоге: 2
Завершенные тесты: 1
15.07.2015, 14:37     Программа для поиска файлов #13
C++
1
name.c_str()
Yandex
Объявления
15.07.2015, 14:37     Программа для поиска файлов
Ответ Создать тему
Опции темы

Текущее время: 09:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru