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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
#1

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

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

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

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

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

Спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для поиска файлов (C++):

Программа для поиска файлов - C++
нужна программа на c++ or php которая будет искать файл и загружать его на фтп, программа должна работать скрытно.и добавляла время и дату...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
13.07.2015, 14:15 #2
Чего не нашёл? Какими функциями искать? FindFirstFile(), FindNextFile().
0
Avazart
Эксперт С++
7187 / 5361 / 280
Регистрация: 10.12.2010
Сообщений: 23,653
Записей в блоге: 17
13.07.2015, 22:38 #3
boost::filesystem ?
0
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 ?
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 12:37 #5
Полный проект: Есть очень много маленьких текстовых файлов необходимо слить в один файл
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
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
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);
    }
}
0
DiffEreD
1430 / 767 / 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";
}
1
Avazart
Эксперт С++
7187 / 5361 / 280
Регистрация: 10.12.2010
Сообщений: 23,653
Записей в блоге: 17
14.07.2015, 14:44 #9
DiffEreD, только не стоит забывать ловить исключения, а то при поиске на диске C будут проблемы.
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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;
}
1
Raali
14.07.2015, 15:59
  #11

Не по теме:

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

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

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

Программа для поиска максимального куска строки кратного 143 - C++
Нужна программа, которая бы в ряде из примерно 10000 чисел, находила самый большой по отрезок, делящийся на 143(11*13). Например.........

Программа для поиска пар взаимно-простых натуральных чисел на определенном промежутке. - C++
Как такое организовать? Тоесть вводишь число 5 потом 10 и программа должна найти все пары чисел у которых нод равен 1!

Программа для поиска введенного слова или фразы во всех файлах каталога - C++
Тема: Использование принципов ООП для поиска в файлах разного типа Исходные данные Каталоги с файлами разных типов (.txt, .xml, и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2015, 14:37
Ответ Создать тему
Опции темы

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