Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
David_Ok
6 / 6 / 1
Регистрация: 12.01.2015
Сообщений: 87
#1

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

13.07.2015, 13:35. Просмотров 780. Ответов 12
Метки нет (Все метки)

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

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

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

Спасибо
http://www.cyberforum.ru/cpp-beginners/thread1367191.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 13:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа для поиска файлов (C++):

Программа для поиска текстовых файлов
Help, pls! Разработать программу для поиска текстовых файлов, содержащих...

Программа поиска повторяющихся файлов
Добрый день! Уже пару дней пытаюсь написать программу, которая ищет...

Программа для поиска седловой точки С++
Элемент матрицы называется седловой точкой, если он является одновременно...

Программа для поиска не повторяющихся слов
Всем привет. Помогите написать функцию которая бы записывала из 1го массива во...

Нужна программа для поиска слова в тексте. с++
ЛЮди, помогите. Нужно написать программу, которая производит поиск введенного...

12
nmcf
6237 / 5549 / 2524
Регистрация: 14.04.2014
Сообщений: 23,337
13.07.2015, 14:15 #2
Чего не нашёл? Какими функциями искать? FindFirstFile(), FindNextFile().
0
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,045
Записей в блоге: 17
13.07.2015, 22:38 #3
boost::filesystem ?
0
David_Ok
6 / 6 / 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 ?
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 12:37 #5
Полный проект: Есть очень много маленьких текстовых файлов необходимо слить в один файл
0
nmcf
6237 / 5549 / 2524
Регистрация: 14.04.2014
Сообщений: 23,337
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");
 }
0
David_Ok
6 / 6 / 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);
    }
}
0
DiffEreD
1441 / 778 / 257
Регистрация: 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";
}
1
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,045
Записей в блоге: 17
14.07.2015, 14:44 #9
DiffEreD, только не стоит забывать ловить исключения, а то при поиске на диске C будут проблемы.
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 14:57 #10
Лучший ответ Сообщение было отмечено David_Ok как решение

Решение

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;
}
1
Raali
14.07.2015, 15:59
  #11

Не по теме:

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

0
David_Ok
6 / 6 / 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 выдает ошибку
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
15.07.2015, 14:37 #13
C++
1
name.c_str()
1
15.07.2015, 14:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 14:37
Привет! Вот еще темы с решениями:

Программа для поиска минимального значения функции
Всем привет! Помогите разобраться и найти ошибку в коде программы. В задачу...

Программа для поиска в тексте номеров телефона
Пожалуйста дорогие и умные программисты, помогите юзверю написать программу на...

Программа для поиска минимального и максимального значения массива
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include...

Программа для поиска максимального куска строки кратного 143
Нужна программа, которая бы в ряде из примерно 10000 чисел, находила самый...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru