Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/107: Рейтинг темы: голосов - 107, средняя оценка - 4.70
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
1

Просмотр файлов в директории

12.06.2013, 21:41. Показов 21142. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Есть имя директории с файлами. Скажите пожалуйста, каким образом в С++ можно получить имена этих файлов? (операционная система - Windows)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2013, 21:41
Ответы с готовыми решениями:

Вывод всех файлов в заданной директории
Здравствуйте, написал код, но почему-то не рабоатет #include<iostream> #include<stdio.h>...

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

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

Как прочитать список всех файлов в директории?
Задача стоит такая : вывести на экран список всех файлов в заданной папке, после этого выбрать один...

15
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
12.06.2013, 21:56 2
Используйте функции FindFirstFile/FindNextFile/FindClose.
http://msdn.microsoft.com/en-u... s.85).aspx
2
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
12.06.2013, 22:34  [ТС] 3
При попытке подставить вместо первого аргумента C-строку, возникает ошибка...
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
12.06.2013, 22:53 4
Лучший ответ Сообщение было отмечено как решение

Решение

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
#include <iostream>
#include <Windows.h>
 
 
 
int main()
{
    using namespace std;
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE const hFind = FindFirstFileW(L"C:\\*", &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            std::wcout << &wfd.cFileName[0] << std::endl;
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    return 0;
}
$Recycle.Bin
Documents and Settings
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
System Volume Information
Users
Windows
6
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
12.06.2013, 23:14  [ТС] 5
Спасибо Вам, очень помогли. Скажите, а можно ли как-нибудь получить размер файла, дату создания и.т.п?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
12.06.2013, 23:21 6
Цитата Сообщение от dota Посмотреть сообщение
Скажите, а можно ли как-нибудь получить размер файла, дату создания и.т.п?
Загляните в структуру WIN32_FIND_DATA, которая используется для поиска файлов,
там все это есть.
3
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 10
11.10.2015, 14:31 7
как указать путь к папке названной кириллицей?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.10.2015, 14:33 8
А в чем проблема ? Нет кириллицы на клавиатуре или что ?
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 10
11.10.2015, 20:49 9
у меня в приложение сделан ввод с клавиатуры
C++
1
2
3
4
wchar_t str1[50];
cout<<"Введите путь к папке:";
wcin >> str1;
HANDLE const hFind = FindFirstFileW(str1, &wfd);
Когда указываешь путь типа: C:\\vev\\Папка\\*
ничего не находится
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.10.2015, 20:52 10
Вставьте перед FindFirstFileW какой-нибудь MessageBoxW с
выводом того, что находится в str1.
0
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 10
11.10.2015, 21:05 11
Название: Безымянный.png
Просмотров: 744

Размер: 4.0 Кб
cout << "Введите путь к папке, по типу "C:\\\\vev\\\\*":";
wcin >> str1;
MessageBoxW(NULL, str1, L"error",MB_ICONERROR);
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.10.2015, 21:07 12
Это "причуды" консоли Windows (точнее, ее хронический недостаток).
Можно попробовать какой-нибудь OemToCharW...
1
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 10
11.10.2015, 21:43 13
вот как я решил мою проблему:
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
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
 
 
 
int main()
{
    wcout.imbue(locale("rus_rus.866"));//для вывода
    wcin.imbue(locale("rus_rus.866"));//для ввода
    WIN32_FIND_DATAW wfd;
    wchar_t str1[30];
    wcout << L"Введите путь к папке, по типу "C:\\\\vev\\\\*":";
    wcin >> str1;
    MessageBoxW(NULL, str1, L"error",MB_ICONERROR);
    HANDLE const hFind = FindFirstFileW(str1, &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            std::wcout << &wfd.cFileName[0] << std::endl;
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
    system("pause");
    return 0;
}
необходимо было добавлять вот эти строчки:
wcout.imbue(locale("rus_rus.866"));//для вывода
wcin.imbue(locale("rus_rus.866"));//для ввода

Добавлено через 2 минуты
Расскажите пожалуйста в чем была задумка в использовании OemToCharW, я так толком и не понял что она делает
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
11.10.2015, 21:56 14
Uneour, довольно старая и избитая проблема. В консоли до сих пор используется кодовая страница из DOS, а Windows работает с другими (на русском это обычно 1251). Эта функция в данном случае переведет введенную строку из 866 в 1251.
2
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.10.2015, 21:58 15
Удалено. tnk500 опередил.
1
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 10
15.10.2015, 15:50 16
в продолжение темы, как оказалось последний вариант моей программы не был правильным поэтому выкладываю окончательный код с внесенными изменениями
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
#define _CRT_SECURE_NO_WARNINGS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define newDBG_NEW
#endif
#endif
 
#define UNICODE
#define _UNICODE
 
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    WIN32_FIND_DATAW wfd;
    wchar_t str1[30];
    wcout << L"Введите путь к папке, по типу C:\\\\vev\\\\*:";
    wcin >> str1;
    HANDLE const hFind = FindFirstFileW(str1, &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            std::wcout << &wfd.cFileName[0] << std::endl;
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
    _CrtDumpMemoryLeaks();
    system("pause");
    return 0;
}
Изменения:
добавил
C++
1
2
#define UNICODE
#define _UNICODE
убрал
C++
1
2
wcout.imbue(locale("rus_rus.866"));
wcin.imbue(locale("rus_rus.866"));
Причины внесенных изменений в том что при использовании
C++
1
2
wcout.imbue(locale("rus_rus.866"));
wcin.imbue(locale("rus_rus.866"));
происходит потеря данных, (возможно данная проверка, что используется в этом варианте кода, не является правильной)
Если кто знает в чем проблема и в чем моя ошибка, отпишите пожалуйста.

Так же меня удивил то факт что если из моего кода убрать
C++
1
setlocale(LC_ALL, "rus");
, то он перестает работать. Почему?
0
15.10.2015, 15:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2015, 15:50
Помогаю со студенческими работами здесь

Вывод в связный список всех файлов/папок в определенной директории
Доброго времени. Есть вот такой код: #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include...

Перезаписывать index.html каждый раз, когда меняется количество файлов в директории
нужно сделать так, чтобы каждый раз когда меняется количество файлов в каталоге C:\\, программа...

Вывести список всех файлов из указанной директории, имена которых содержат русские буквы
Здравствуйте! Есть такая задача: Вывести список всех файлов из указанной директории, имена...

для указанной директории произвести рекурсивный перебор всех вложенных поддиректорий и файлов с занесением результатов в файл
Необходимо разработать приложение (на языке программирования C++), которое позволяет для указанной...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru