Witam! Mam dość dziwny problem związany z fragmentem kodu w moim programie ,który stworzyłem w visual studio 2017.Miał on za zadanie odczytać nazwy plików i folderów w określonej ścieżce za pomocą funkcji zawartych w bibliotece dirent.h . Nazwy miały być różne np: 123 , żółć , itd. Program odczytywał je dobrze z wyjątkiem tych gdzie były polskie znaki , zamiast nazw były znaki "?". Szukałem długo rozwiązania w tym kawałku kodu ale nie znalazłem. Po pewnym czasie przeniosłem kod do środowiska Code::Blocks gdzie właśnie ten sam kod działał bez problemu.
Nie wiem dlaczego tak to działa. Jeśli ktoś się zna w tym temacie to proszę niech mi powie co mam zrobić żeby ten kod działał w visual studio?
kod:
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <dirent.h>
#include <string>
using namespace std;
DIR* katalog;
struct dirent* pozycja;
string plik;
string PL(const char * text); // funkcja zamieniająca krzaki na polskie znaki
void detect_folder()
{
katalog = opendir("ABC"); // katalog w którym będą odczytywane pliki i foldery
pozycja = 0;
while (pozycja = readdir(katalog))
{
plik = (*pozycja).d_name;
cout << PL(plik.c_str()) << endl; // wyświetla nazwy plików i folderów
}
}
int main()
{
detect_folder();
return 0;
}
string PL(const char * text)
{
string result;
for (; *text; ++text)
switch (*text)
{
case 'ą': result += static_cast <char>(0xa5); break;
case 'ć': result += static_cast <char>(0x86); break;
case 'ę': result += static_cast <char>(0xa9); break;
case 'ł': result += static_cast <char>(0x88); break;
case 'ń': result += static_cast <char>(0xe4); break;
case 'ó': result += static_cast <char>(0xa2); break;
case 'ś': result += static_cast <char>(0x98); break;
case 'ż': result += static_cast <char>(0xbe); break;
case 'ź': result += static_cast <char>(0xab); break;
case 'Ą': result += static_cast <char>(0xa4); break; //(0xa4) // dla duzej litery
case 'Ć': result += static_cast <char>(0x8f); break; //(0x8f)
case 'Ę': result += static_cast <char>(0xa8); break; //(0xa8)
case 'Ł': result += static_cast <char>(0x9d); break; //(0x9d)
case 'Ń': result += static_cast <char>(0xe3); break; //(0xe3)
case 'Ó': result += static_cast <char>(0xe0); break; //(0xe0)
case 'Ś': result += static_cast <char>(0x97); break; //(0x97)
case 'Ż': result += static_cast <char>(0xbd); break; //(0xbd)
case 'Ź': result += static_cast <char>(0x8d); break; //(0x8d)
default: result += *text; break;
}
return result;
}
rezultat działania programu napisanego w visual studio:
rezultat działania programu w Code::Blocks:
Z góry dziękuje za pomoc!!!