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

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

Войти
Регистрация
Восстановить пароль
 
фру зе сторм
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 3
#1

Считывание файлов в папке с++ - C++

08.07.2015, 16:28. Просмотров 387. Ответов 5
Метки нет (Все метки)

Здравствуйте, уважаемые знатоки!
Задача простая: есть папка; в папке много файлов; нужно считывать из папки эти файлы и каким-то образом обрабатывать.
Хотел использовать следующий код, однако ругается на первую переменную функции FindFirstFile (argument of type "const char *" is incompatible with parametr of type "LPCWSTR")
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
   WIN32_FIND_DATA win;
   char* buff = new char[255];
       HANDLE han = FindFirstFile("G:\\dir\\*.doc*",&win);
       if(han != INVALID_HANDLE_VALUE)
       {
           strcpy(buff,win.cFileName);
           strcat(buff," , ");
          while(FindNextFile(han,&win))
          {
               strcat(buff,win.cFileName);
               strcat(buff," , ");
          }
          std::cout << buff << std::endl;
   CloseHandle(han);
       }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 16:28     Считывание файлов в папке с++
Посмотрите здесь:

Считывание с файлов! C++
Считывание из файлов C++
Считывание из файлов C++
C++ Считывание файлов в двумерный массив
считывание строк из потока файлов C++
Подсчет количества файлов в папке, размер которых не превышает указанный C++
C++ Поиск всех файлов в папке и вывод их имен
Как узнать количество файлов в каталоге (папке) ? C++
C++ Контейнер set. Найти имена всех файлов в папке
Считывание файлов и консоли с++ C++
Считывание и запись .bmp файлов C++
Система тестирования: считывание вопросов из файлов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
08.07.2015, 16:37     Считывание файлов в папке с++ #2
Цитата Сообщение от фру зе сторм Посмотреть сообщение
FindFirstFile("G:\\dir\\*.doc*",&win);
C++
1
FindFirstFile(L"G:\\dir\\*.doc*",&win);
фру зе сторм
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 3
08.07.2015, 17:05  [ТС]     Считывание файлов в папке с++ #3
Raali, ещё такой вопрос:

vector<string> get_all_files_names_within_folder(string folder)
{
vector<string> names;
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(L"dir", &fd);
if(hFind != INVALID_HANDLE_VALUE) {
do {
if(! (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) {
names.push_back(fd.cFileName);
}
}while(::FindNextFile(hFind, &fd));
::FindClose(hFind);
}
return names;
}

names.push_back(fd.cFileName) не прокатывает, потому что fd.cFileName возвращает весьма странный тип. Как здесь привести?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
08.07.2015, 18:21     Считывание файлов в папке с++ #4
а какой тип у вектора name
и какой возвращает cFileName ?
Геомеханик
528 / 335 / 257
Регистрация: 26.06.2015
Сообщений: 767
08.07.2015, 18:37     Считывание файлов в папке с++ #5
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
49
50
51
52
53
54
55
56
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <string>
#include <vector>
 
#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif
 
 
BOOL get_files(LPCTSTR folder, std::vector<tstring>* files, 
                    BOOL full_path = FALSE){
    WIN32_FIND_DATA inf;
    LPCTSTR pf = _tcsrchr(folder, _T('\\'));
 
    HANDLE  fp = FindFirstFile(folder, &inf);
    if(fp == INVALID_HANDLE_VALUE)
        return FALSE;
 
    files->clear();
    do {
        if(! (inf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){
            if(full_path){ // если указан полный путь к файлу
                files->push_back( tstring(folder, pf + 1) );
                files->back().append(inf.cFileName);
            } else
                files->push_back(inf.cFileName);
        }
    } while(FindNextFile(fp, &inf));
 
    FindClose(fp);
    return TRUE;
}
 
 
int main(void){
    const TCHAR fn[] = _T("G:\\dir\\*.doc*");
    
    std::vector<tstring> fs;
    get_files(fn, &fs);
    std::vector<tstring>::const_iterator i;
    for(i = fs.begin(); i != fs.end(); ++i)
        _putts( i->c_str() );
    _puttchar(_T('\n'));
 
    // получить файлы с полным путём
    get_files(fn, &fs, TRUE);
    for(i = fs.begin(); i != fs.end(); ++i)
        _putts( i->c_str() );
 
    _gettchar();
    return 0;
}
фру зе сторм
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 3
08.07.2015, 21:27  [ТС]     Считывание файлов в папке с++ #6
Геомеханик, великолепный код! Огромное спасибо!
Yandex
Объявления
08.07.2015, 21:27     Считывание файлов в папке с++
Ответ Создать тему
Опции темы

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