Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с каталогами / 21 сообщений из 21, страница 1 из 1
17.04.2014, 21:36
    #38618092
NNN7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
необходимо получить имена всех файлов находящихся в определенной директории и поместить имя каждого файла в отдельный индекс массива.

вот пытаюсь делать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include<windows.h>
#include<stdio.h>
#include<string.h>
 
int main(){
    WIN32_FIND_DATA FindFileData;
    HANDLE hf=FindFirstFile("c:\\*", &FindFileData);
    CHAR fileNames[200][MAX_PATH];
    INT i=0;
    if (hf==INVALID_HANDLE_VALUE){puts("Path not found"); return 1;}
        do{
            strcpy(fileNames[i], FindFileData.cFileName);
            puts(fileNames[i]);
            ++i;
        }
        while (FindNextFile(hf,&FindFileData));
        FindClose(hf);
    return 0;
}



Но выдаёт ошибку :

'strcpy' : cannot convert parameter 2 from 'WCHAR [260]' to 'const char *'

как это можно исправить ? помогите , пожалуйста , хочется разобраться , что и к чему
Заранее огромное спасибо!
...
Рейтинг: 0 / 0
17.04.2014, 22:54
    #38618146
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Типы данных CHAR и INT это не тоже самое что char и int.
...
Рейтинг: 0 / 0
17.04.2014, 22:58
    #38618147
NNN7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Извините , но я с этими типами разобраться не могу . Алгоритм то понимаю, а такая мелочь не даёт нормально работать (

Как это переделать можно ? Подскажите, прошу Вас .
...
Рейтинг: 0 / 0
18.04.2014, 09:50
    #38618337
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7

Есть утилитка, выводящая с сортировкой список файлов и папок из папки с их атрибутами,
аналог стандартной ls .
Только под linux. Если интересно выложу в комменты.
...
Рейтинг: 0 / 0
18.04.2014, 09:56
    #38618347
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7Извините , но я с этими типами разобраться не могу . Алгоритм то понимаю, а такая мелочь не даёт нормально работать (

Как это переделать можно ? Подскажите, прошу Вас .

Это зависит от того, какие цели преследует вышеуказанная програмуля.
...
Рейтинг: 0 / 0
18.04.2014, 09:58
    #38618353
Strangecat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7необходимо получить имена всех файлов находящихся в определенной директории и поместить имя каждого файла в отдельный индекс массива.

Но выдаёт ошибку :

'strcpy' : cannot convert parameter 2 from 'WCHAR [260]' to 'const char *'

как это можно исправить ? помогите , пожалуйста , хочется разобраться , что и к чему
Заранее огромное спасибо!

Это из-за юникода.

Сейчас у тебя FindFirstFile использует 16-битные WCHAR. strcpy работает с 8 битными char'ами.

Либо в настройках проекта выруби использование юникода( http://stackoverflow.com/questions/1319461/how-do-i-turn-off-unicode-in-a-vc-project), либо не используй strcpy.
В первом случае будут проблемы с именами содержащими не английские символы. Хотя учитывая, что ты используешь консоль, там всё равно проблемы будут.
...
Рейтинг: 0 / 0
18.04.2014, 10:17
    #38618386
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7как это можно исправить ? помогите , пожалуйста , хочется разобраться , что и к чему
Заранее огромное спасибо!
Это компилятор изначально настроен на юникод. Отключи. Тут с картинками
...
Рейтинг: 0 / 0
18.04.2014, 10:24
    #38618395
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Dima TЭто компилятор изначально настроен на юникод

Разве в win глобальная локаль не utf-8? Если нет, то все функции из стандартной либы
будут без проблем переваривать и ASCII без переключений локали.
...
Рейтинг: 0 / 0
18.04.2014, 10:31
    #38618406
Strangecat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
smaldDima TЭто компилятор изначально настроен на юникод

Разве в win глобальная локаль не utf-8? Если нет, то все функции из стандартной либы
будут без проблем переваривать и ASCII без переключений локали.

Нет. WinAPI использует либо UTF-16(UCS-2 в старых виндах) либо черти-что (cp1251 в русских виндах).
...
Рейтинг: 0 / 0
18.04.2014, 10:32
    #38618408
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
smaldРазве в win глобальная локаль не utf-8?
Нет. WinAPI понимает либо ASCII, либо UNICODE.
...
Рейтинг: 0 / 0
18.04.2014, 10:54
    #38618439
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Dima TsmaldРазве в win глобальная локаль не utf-8?
Нет. WinAPI понимает либо ASCII, либо UNICODE.

Определённо, всем срочно на линуксы.
...
Рейтинг: 0 / 0
18.04.2014, 11:50
    #38618521
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7,

Добавлю свои 5 копеек - а если файлов будет больше 200?
...
Рейтинг: 0 / 0
18.04.2014, 12:02
    #38618548
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Strangecat(cp1251 в русских виндах).cp866, что ещё интереснее ))
...
Рейтинг: 0 / 0
18.04.2014, 12:25
    #38618595
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
egorychcp866, что ещё интереснее ))
это только консоль и батники 866 используют. Консоль можно переключить на 1251.
...
Рейтинг: 0 / 0
18.04.2014, 13:06
    #38618679
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include<windows.h>
#include<stdio.h>
#include<string.h>
 
int main(){
    WIN32_FIND_DATA FindFileData;
    HANDLE hf=FindFirstFile("c:\\*", &FindFileData);
    // должно быть char вместо CHAR
    CHAR fileNames[200][MAX_PATH];
    // должно быть int вместо INT
    INT i=0;
    if (hf==INVALID_HANDLE_VALUE){puts("Path not found"); return 1;}
        do{
            // дожнет быть контроль на выход за пределы массива fileNames
            strcpy(fileNames[i], FindFileData.cFileName);
            puts(fileNames[i]);
            ++i;
        }
        while (FindNextFile(hf,&FindFileData));
        FindClose(hf);
    return 0;
}
...
Рейтинг: 0 / 0
18.04.2014, 16:58
    #38619052
NNN7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Я вот немного переделал , и решил, что буду записывать имена файлов через контейнер set.
Вот :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set<WCHAR> f1;  //объявили
int main(){
    WIN32_FIND_DATA FindFileData, FindFileData2;
    HANDLE hf1=FindFirstFile(L"C:\\dir\\*", &FindFileData);
    WCHAR fileNames[200][MAX_PATH];
    INT i=0;
	cout<<"dir1:"<<endl;
    if (hf1==INVALID_HANDLE_VALUE){puts("Path not found"); return 1;}
        do{
			f1.insert(FindFileData.cFileName);
           }
        while (FindNextFile(hf1,&FindFileData));
        FindClose(hf1);



Но выдаёт ошибку :

error C2664: 'std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::insert(const wchar_t &)' : cannot convert parameter 1 from 'WCHAR [260]' to 'const wchar_t &'


как можно исправить ? подскажите, пожалуйста
...
Рейтинг: 0 / 0
18.04.2014, 17:21
    #38619072
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7как можно исправить ? подскажите, пожалуйста


Исправлять такое только на уровне DNA, путём хождения в хороший университет и обучения там науке программирования.
Мне вот лично лень тебе на форуме читать курс 2 семестровый по С++.
...
Рейтинг: 0 / 0
18.04.2014, 17:58
    #38619130
NNN7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
Я всё понимаю, что никому не хочется что-то решать за кого-то и рассказывать курс лекций . Но иногда просто ж нужно какая-то подсказка , из-за нехватка опыта .
Вот что у меня пока получается:

Код: plaintext
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);



Ошибок не выдаёт , но выводит не названия файлов , а какие-то записи (буквы+цифры) , при чём все одинаковые

я уже и не знаю, как его исправлять дальше
...
Рейтинг: 0 / 0
18.04.2014, 18:37
    #38619159
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7Я всё понимаю, что никому не хочется что-то решать за кого-то и рассказывать курс лекций .
Товарисч писатель, почитай ответы внимательно, тебе несколько раз написали что сделать чтобы заработал твой код из первого поста. Без изменений.
...
Рейтинг: 0 / 0
19.04.2014, 16:48
    #38619530
RubinDm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
NNN7, посмотрите в сторону библиотеки boost.. например тут . Хотя, применение буст не избавит Вас от необходимости знания языка, может даже усугубит такую необходимость. Но велосипедов в Вашем коде будет заведомо меньше.
...
Рейтинг: 0 / 0
19.04.2014, 20:38
    #38619620
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с каталогами
RubinDmпосмотрите в сторону библиотеки boost.
он над нами издевался, ну сумашедший, что возьмёшь(с)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с каталогами / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]