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

Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод - C++

Войти
Регистрация
Восстановить пароль
 
Misha_cpp
Заблокирован
18.04.2014, 18:09     Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод #1
Есть такая задача: получить название файлов с 1-ой папки , со 2-ой папки и вывести название тех файлов , которые отличают эти папки между собою.

Делаю через контейнер set.

Пытаюсь вставить имена файлов и вывести их:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set <WCHAR*> f1;  //объявили
int main(){
 
    WIN32_FIND_DATA FindFileData, FindFileData2;
    HANDLE hf1=FindFirstFile(L"C:\\dir\\*", &FindFileData);
    INT i=0;
    cout<<"dir1:"<<endl;
    if (hf1==INVALID_HANDLE_VALUE){puts("Path not found"); return 1;}
        do{
            f1.insert(&FindFileData.cFileName[0]);
            copy(f1.begin(), f1.end(), ostream_iterator<WCHAR*>(cout, " "));
            
           }
        while (FindNextFile(hf1,&FindFileData));
        FindClose(hf1);
ошибок не выдаёт , но вместо названий файлов выводятся непонятные коды , при чём одинаковые ( количесвто совпадает с количеством файлов).

как это исправить ? я уже замучился с этой задачей, не пойму , как её переделать
Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 18:09     Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод
Посмотрите здесь:

Вывод на экран список файлов и название программ С++ , находящимся в указанном при запуске программы каталоге C++
Название папки проекта C++
C++ Папки header файлов. VS 2010
удаление папки C++
Открытие файлов из заданной папки C++
Как получить все папки и файлы хранящиеся на диске? C++
C++ Указание рабочей папки для файлов на C++
В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" C++
C++ Создание папки
C++ Получить список пользователей расшареной папки
C++ Опрос папки и удаление из неё всех файлов кроме заданного расширения
C++ Как можно в С++ получить список файлов и папок какого-то диска или папки?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 202
18.04.2014, 20:02     Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод #2
C++
1
f1.insert(&FindFileData.cFileName[0]);
Ты сохраняешь указатель на строку &FindFileData.cFileName[0], это временный указатель. Он начинает указывать не известно на что после следующего вызова FindNextFile(hf1,&FindFileData);
Нужно выделять память копировать в нее и сохранять указатель на выделенную память.
C++
1
copy(f1.begin(), f1.end(), ostream_iterator<WCHAR*>(cout, " "));
Каждую итерацию выводишь содержимое сета. Зачем? По моему необходимо вынести за цикл.
Ну и соответственно числа которые выводит программа это адреса, а не строки которые хранятся по этим адресам.
<WCHAR*> - адрес а не строка.

Добавлено через 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
#include <iostream>
#include <string>
#include <windows.h>
 
int main()
{
        WIN32_FIND_DATA FindFileData, FindFileData2;
        HANDLE hf1 = FindFirstFile(L"C:\\dir\\*", &FindFileData);
        
        if (hf1 == INVALID_HANDLE_VALUE) {
            std::cout <<  "Path not found" << std::endl;
            system("pause");
            return 1; 
        }
 
        int i = 1;
        do {
            WCHAR* buffer = new WCHAR[260];
            wcscpy(buffer,&FindFileData.cFileName[0]);
            std::wcout << "dir" << i << " - " << std::wstring(buffer) << std::endl;
            delete[] buffer;
            i++;
        } while (FindNextFile(hf1,&FindFileData));
 
        FindClose(hf1);
        system("pause");
}
Не фанат я всяких WCHAR* и иже с ними. Стринг он завсегда приятнее...
Yandex
Объявления
18.04.2014, 20:02     Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод
Ответ Создать тему
Опции темы

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