Не отображаются русские имена файлов?!
От: schoolboy  
Дата: 30.03.06 21:39
Оценка:
Здравствуйте, уважаемые программисты!

Я начинающий и пока еще ничего не знаю. Помогите пожалуйста в таком вопросе:
Я написал маленькую программу, которая используя фукции 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.
Re: Не отображаются русские имена файлов?!
От: adontz Грузия http://adontz.wordpress.com/
Дата: 30.03.06 22:08
Оценка: +1
Здравствуйте, schoolboy, Вы писали:

Статья
Автор(ы): Алексей Кирюшкин
+ Комментарии
Автор: Алексей Кирюшкин
Дата: 24.08.01


Не то чтобы поиск всегда находит то что надо, но пользоватся им всё же стоит
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Не отображаются русские имена файлов?!
От: schoolboy  
Дата: 01.04.06 16:41
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, schoolboy, Вы писали:


A>Статья
Автор(ы): Алексей Кирюшкин
+ Комментарии
Автор: Алексей Кирюшкин
Дата: 24.08.01


A>Не то чтобы поиск всегда находит то что надо, но пользоватся им всё же стоит


Уважаемый, adontz.
К сожалению описанные там выходы не подходят для моей ситуации. Так как я вывожу имена файлов, а не текст который введен в теле программы.
Но за ответ и проявленное внимание: СпасиБо.
Re[3]: Не отображаются русские имена файлов?!
От: adontz Грузия http://adontz.wordpress.com/
Дата: 01.04.06 17:30
Оценка:
Здравствуйте, schoolboy, Вы писали:

S>Так как я вывожу имена файлов, а не текст который введен в теле программы.


А какая разница откуда взялся текст?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Не отображаются русские имена файлов?!
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.04.06 03:53
Оценка:
Здравствуйте, schoolboy, Вы писали:

S>Уважаемый, adontz.

S>К сожалению описанные там выходы не подходят для моей ситуации.

а ты все-таки попоробуй
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Не отображаются русские имена файлов?!
От: schoolboy  
Дата: 05.04.06 18:04
Оценка:
Здравствуйте, 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;
}


СпасиБО!!! за внимание к моей проблеме.
Re[5]: Не отображаются русские имена файлов?!
От: vvotan Россия  
Дата: 05.04.06 21:20
Оценка:
Здравствуйте, 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>>
Re[5]: Не отображаются русские имена файлов?!
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 06.04.06 04:05
Оценка:
Здравствуйте, 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>>
Re[6]: Не отображаются русские имена файлов?!
От: schoolboy  
Дата: 10.04.06 00:12
Оценка:
Здравствуйте, Odi$$ey, vvotan!

Благодарю за оказанную помощь!!!
vvotan, Изменение шрифта помогло, но это не может быть достаточным решением, в том случае если программой будет пользоваться кто-нибудь еще, кто не знает как шрифт поменять и т. п.
Особая благодарность мной выражается Odi$$e`ю за пример того как можно было это сделать сразу. Правда мой компановщик не смог скомпановать, пишет:
[Linker error] undefined reference to `WinMain@16', соотведственно экзе-файла не получилось, но это уже другой вопрос.
СпасиБО!!! Все откликнувшимся за помощь (время и деньги затраченные).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.