nie można otworzy c pliku z polskimi znakami w jego nazwie

0

Witam, mój problem polega na tym, że nie moge otworzyć pliku który zawiera polskie litery w nazwie. Staram sie to robić w ten sposób:

 
string URL = "łłł.txt";
fstream OdczytNazwyPliku;
OdczytNazwyPliku.open(URL.c_str(), ios::in);

przeszukuje strony i nie moge nigdzie znaleŹć odpowiedzi. Proszę o pomoc.

0

Na początek zmień kodowanie pliku źródłowego (ISO-....-2 lub CP1250 ewentualnie UTF-8), skompiluj i sprawdź.

0

Użyj wstring zamiast string i wfstream zamiast fstream. I pamiętaj, że wtedy będziesz musiał podawać stringi w kodowaniu unicode (w visualu wystarcza dać L przed ").

0

to nic nie daje, doszedłem do wniosku, że problem chyba leży w

open() 

, ponieważ nie czyta adresu pliku z folderami z polskimi znakami np. C:\Users\Bartek\Desktop\łś\2.txt. a jeżeli napisze :OdczytNazwyPliku.open(L"łłł.txt", ios::in);

 to działa a jak <code class="cpp">OdczytNazwyPliku.open(L"C:\Users\Bartek\Desktop\łś\łłł.txt", ios::in); 

to już nie

nobodycodes napisał(a)

Użyj wstring zamiast string i wfstream zamiast fstream. I pamiętaj, że wtedy będziesz musiał podawać stringi w kodowaniu unicode (w visualu wystarcza dać L przed ").

wfstream... nigdzie nie mogę znaleźć informacji na ten temat

0
nacolibre napisał(a)
OdczytNazwyPliku.open(L"C:\Users\Bartek\Desktop\łś\łłł.txt", ios::in); 

to już nie

Musisz dać podwójne slashe. Dziwne, że kompilator nie wyrzucił Ci żadnych warningów.

wfstream... nigdzie nie mogę znaleźć informacji na ten temat

Sorry, mój błąd. Skoro nie ma to pewnie ma gdzieś w sobie przeciążone operatory dla unicode. Wiem, że na pewno jest wifstream i wofstream.

0

Wiem, że na pewno jest wifstream i wofstream.

racja jest (już ze zmęczenia popełniam błędy), faktycznie przy fstream nie wywala błędów, problem polega teraz na tym, że w moim programie można sobie wybrać dowolny plik w trakcie działania programu, pierwotnie program otwierał plik tak :

 OdczytNazwyPliku.open(URL.c_str(), ios::in); 

gdzie URL był zwykłym stringiem będącym adresem do wybranego pliku.

jednak c_str() działa pod wstring, musze jedynie zamienić \ na \ w adresie, oraz pozostaje problem konwersji z string na wstring. znalazłem coś takiego:

  copy(URL.begin(), URL.end(), back_inserter(g));

jednak problem z kodowaniem chyba jest, jeszcze musze to sprawdzić

1

spróbuj dodać gdzieś na początku programu to

#include <clocale>
...
setlocale(LC_CTYPE,".1250");

może zadziała.
Problem jest na 100% w kodowaniu znaków — w jakim środowisku piszesz program?

0
Azarien napisał(a)

spróbuj dodać gdzieś na początku programu to

#include <clocale>
...
setlocale(LC_CTYPE,".1250");

może zadziała.
Problem jest na 100% w kodowaniu znaków — w jakim środowisku piszesz program?

Racja :) Azarien dzięki wielkie :) wszystko działa bez innych modyfikacji:) Dziękuje wszystkim za zainteresowanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1