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

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

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

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

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

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

Спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 13:35
Ответы с готовыми решениями:

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

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

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

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

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

12
nmcf
6398 / 5661 / 2580
Регистрация: 14.04.2014
Сообщений: 23,942
13.07.2015, 14:15 2
Чего не нашёл? Какими функциями искать? FindFirstFile(), FindNextFile().
0
Avazart
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,468
Записей в блоге: 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
3141 / 1917 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 12:37 5
Полный проект: Есть очень много маленьких текстовых файлов необходимо слить в один файл
0
nmcf
6398 / 5661 / 2580
Регистрация: 14.04.2014
Сообщений: 23,942
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
1442 / 779 / 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
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,468
Записей в блоге: 17
14.07.2015, 14:44 9
DiffEreD, только не стоит забывать ловить исключения, а то при поиске на диске C будут проблемы.
0
gazlan
3141 / 1917 / 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
++Ͻ
14739 / 8422 / 1596
Регистрация: 27.09.2012
Сообщений: 20,713
Записей в блоге: 2
Завершенные тесты: 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

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

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

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


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

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

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