Здравствуйте, уважаемые программисты!
Я начинающий и пока еще ничего не знаю. Помогите пожалуйста в таком вопросе:
Я написал маленькую программу, которая используя фукции WIN32API выводит содержимое каталога:
///////////////////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <iostream>
main()
{
using std::cout;
using std::cin;
char path[] = "E:\\temp\\*.*\0";
char s;
LPCTSTR lpFileNamef;
LPWIN32_FIND_DATA lpFindFileDataf;
HANDLE fResult;
BOOL fNext=1;
HANDLE hFindFilef;
WIN32_FIND_DATA fName;
lpFileNamef = path;
fResult = FindFirstFile(lpFileNamef, lpFindFileDataf);
fName = *lpFindFileDataf;
cout << fName.cFileName << "\n";
while (fNext){
fNext = FindNextFile(fResult, lpFindFileDataf);
fName = *lpFindFileDataf;
cout << fName.cFileName << "\n";
};
cin >> s;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
ВОТ РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ:
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
.
..
(4073).KTM
123.dbf
123.txt
2005_004.001
Autoexec.bat.htm
COMMAND.COM
Config.sys.htm
frontpag.gif
gadflyDB
htm.html
html.htm
Image3.gif
Image5.gif
Left.htm
Main.htm
README.dos
Readme.txt
temp
temp.dbm.dat
temp.dbm.dir
temp10str.txt
temp11str.txt
temp8str.txt
temp9str.txt
tempstr.txt4
tempstr.txt5
tempstr.txt6
tempstr.txt7
tempvac.txt
test.htm
test.txt
test.txt.bak
Thumbs.db
vac.htm
Vac.txt
?тЄюьрЄшўхёъшщ яюшёъ тшЁЄєры№эюую фшёър.htm
?шЁєё?.htm
?шрыюуют?х ъюьрэфэ?х Їрщы? ш чруЁєчюўэюх ьхэ? яюы№чютрЄхы .htm
?эёЄрыы Ўш юсюЁєфютрэш .htm
?ёяюы№чютрэшх рЁїштют т MS-DOS.htm
?юф? чртхЁ°хэш эхъюЄюЁ?ї яЁюуЁрьь.htm
??????? ??????????.htm
?юьяюэхэЄ? фЁр MS-DOS.htm
?юья№?ЄхЁ.JPG
?хэ? чруЁєчъш.htm
?хъюЄюЁ?х яЁюуЁрьь?.htm
?хъюЄюЁ?х Ёрё°шЁхэш .htm
?хўшЄрхьюёЄ№ ш эхєфры хьюёЄ№ ёюфхЁцшьюую яряъш.htm
?схёяхўхэшх фюёЄєяр ъ ъюьяръЄ-фшёъє т MS-DOS.htm
?сырър.JPG
?сЄ.gif
?яЄшьшчрЎш эр яЁюёЄхщ°хь єЁютэх.htm
юяЄшьшчрЎ? ш ёярёхэшх ibm pc.htm
?Єърч ъюья№?ЄхЁр юЄ чруЁєчъш.htm
?юЁ фюъ чруЁєчъш ъюья№?ЄхЁр.htm
?ЁхфтрЁшЄхы№э?х ётхфхэ№ .htm
?ЁхфёЄртыхэшх MS-DOS т ЎтхЄх.htm
?????? ? MS-DOS.htm
?рчЁх°хэшх яЁюсыхь Ёхцшьр MS-DOS.htm
?хчхЁтэюх ъюяшЁютрэшх.htm
?єёшЇшърЎш MS-DOS.htm
?шёЄхьэ?щ ЁххёЄЁ.htm
?ючфрэшх чруЁєчюўэ?ї фшёъхЄ.htm
?ючфрэшх ыюушўхёъшї Ёрчфхыют ш ЇюЁьрЄшЁютрэшх цхёЄъшї фшёъют.htm
?яЁртюўэшъ.ico
?ёЄрэютър юяхЁрЎшюээющ ёшёЄхь?.htm
?рщы? ъюэЇшуєЁрЎшш.htm
?рщы? ъюэЇшуєЁрЎшш.htm
ВОПРОС: Что мне нужно сделать чтобы она выводила правильно русские имена файлов(как видите сейчас вместо корректного имени абракадабра)?
Посоветуйте как мне сделать эту программу лучше? И если у кого-нибудь есть замечания по поводу того, что я написал с благодарностью приму их.
Среда разработки DEV-C++ Version 4.9.9.1, exe-файлы создаются с помощью Mingw (думаю многие знают об этом компиляторе
http://www.mingw.orh)
Исполняю как видите в Windows XP.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, schoolboy, Вы писали:
A>СтатьяАвтор(ы): Алексей Кирюшкин
+ КомментарииАвтор: Алексей Кирюшкин
Дата: 24.08.01
A>Не то чтобы поиск всегда находит то что надо, но пользоватся им всё же стоит
Уважаемый, adontz.
К сожалению описанные там выходы не подходят для моей ситуации. Так как я вывожу имена файлов, а не текст который введен в теле программы.
Но за ответ и проявленное внимание: СпасиБо.
Здравствуйте, schoolboy, Вы писали:
S>Так как я вывожу имена файлов, а не текст который введен в теле программы.
А какая разница откуда взялся текст?
Здравствуйте, schoolboy, Вы писали:
S>Уважаемый, adontz.
S>К сожалению описанные там выходы не подходят для моей ситуации.
а ты все-таки попоробуй

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Odi$$ey, Вы писали:
OE>а ты все-таки попоробуй
Здравствуйте, Odi$$ey, Вы писали:
OE>а ты все-таки попоробуй
А я уже и попытался, только результат без изменений. Даже используя функцию установки кодовой страницы (SetConsoleOutputCP(1251)

таже самая абракадабра. После внесенных изменений программа выглядит таким образом: (Только вывод попрежнему неправильный).
#include <windows.h>
#include <wincon.h>
#include <iostream>
#include <stdio.h>
#define UNICODE
main()
{
using std::cout;
using std::cin;
char s;
LPCTSTR lpFileNamef = "E:\\temp\\*.*\0";
LPWIN32_FIND_DATA lpFindFileDataf;
HANDLE fResult, hFindFilef, hStdOutputHandle, hStdInputHandle;
BOOL fNext=1;
WIN32_FIND_DATA fName;
DWORD dwResult;
SetConsoleOutputCP(1251);
hStdOutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);
fResult = FindFirstFile(lpFileNamef, lpFindFileDataf);
fName = *lpFindFileDataf;
WriteConsole(hStdOutputHandle, fName.cFileName, strlen(fName.cFileName), &dwResult, NULL);
cout << '\n';
do{
fNext = FindNextFile(fResult, lpFindFileDataf);
fName = *lpFindFileDataf;
WriteConsole(hStdOutputHandle, fName.cFileName, strlen(fName.cFileName), &dwResult, NULL);
cout << '\n';
}while (fNext);
cout << GetConsoleOutputCP(); //Смотрим изменилась ли кодовая страница
cin >> s;
}
СпасиБО!!! за внимание к моей проблеме.
Здравствуйте, schoolboy, Вы писали:
S>Здравствуйте, Odi$$ey, Вы писали:
OE>>а ты все-таки попоробуй
S>Здравствуйте, Odi$$ey, Вы писали:
OE>>а ты все-таки попоробуй
S>А я уже и попытался, только результат без изменений. Даже используя функцию установки кодовой страницы (SetConsoleOutputCP(1251)
таже самая абракадабра.
При использовании стандартного шрифта, консоли _плевать_ на кодовую страницу. Смени шрифт в консоли например на Lucida Console.
--
Sergey Chadov
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, schoolboy, Вы писали:
OE>>а ты все-таки попоробуй
S>А я уже и попытался, только результат без изменений.

Вот пример, если в каталоге есть файлы с русскими именами, они нормально выводятся:
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile( argv[1], &FindFileData );
if( hFind != INVALID_HANDLE_VALUE )
{
CharToOem( FindFileData.cFileName, FindFileData.cFileName );
cout << FindFileData.cFileName << endl;
while ( FindNextFile( hFind, &FindFileData ) )
{
CharToOem( FindFileData.cFileName, FindFileData.cFileName );
cout << FindFileData.cFileName << endl;
}
FindClose( hFind );
}
return 0;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>