Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Zmiana nazw plików (tworzenie pliku) polskie znaki.

Ostatnio zmodyfikowano 2015-01-11 23:21
Autor Wiadomość
Monika90
» 2015-01-05 00:26:09
W Windows są takie dwie funkcje
http://msdn.microsoft.com​/en-us/library/windows/desktop​/dd319072%28v=vs.85%29.aspx
http://msdn.microsoft.com​/en-us/library/windows/desktop​/dd374130%28v=vs.85%29.aspx
które mogą Ci się przydać.

Jeżeli się nie mylę, to w Linuksie UTF-8 po prostu działa.
P-124169
Krump
Temat założony przez niniejszego użytkownika
» 2015-01-05 00:35:19
Monika, to już widziałem, ale nie chciałby tak głęboko korzystać z windowsowych rozwiązań, gdyż ten program może być potrzebny z czasem na serwery które stoją pod linuksem.

SocrateZ, a da rade pobierać getline do char zmieniać to za pomocą tego co mi podsunąłeś i potem to wpisywać do stringa? Chodzi o to, że używam funkcji stringa (.erase .substr itp.) i teraz zmiana składników, niszczy cały mój algorytm. Nie ruszyło by to w ogóle mojego algorytmu, tylko dodało by parę linijek więcej, plus moja funkcje pol() zastępuje twoją z ASCII. Tylko szczerze nie do końca wiem jak to napisać. Zawsze char omijałem i ożywałem stringa, niezbyt lubię go i znam go tylko z teorii ;/
P-124170
SocrateZ
» 2015-01-05 00:47:14
Jeżeli się nie mylę, to w Linuksie UTF-8 po prostu działa.

Potwierdzam. Właśnie to sprawdziłem.
Tylko że te funkcje windowsowskie do niczego się nie przydadzą.

Dobra... pętle musisz przerobić na coś takiego:
C/C++
const char * strtab = str.c_str();
int length = str.length();
int z = 0;

while( x < length )
{
    resnum = 0;
    y = get_char_bytes(( unsigned char ) strtab[ x ] );
    z = 0;
    sign = strtab[ x ];
   
    while( ++z < y )
    {
        resnum |= sign << 8 * y;
        printf( "%d ", sign );
        sign = strtab[ x + z ];
    }
   
    printf( "%d ", sign );
    resnum |= sign;
   
    printf( "%d (0x%X)\n", resnum, resnum );
    add_utf8_to_ansi_string( resnum, nfname, & x, 256 );
}

Gdzie str to zmienna z nazwą pliku w formacie string. Znaki końcowe zostaną w tablicy nfname.
Linuks to olewa i niezależnie od tego czy będzie formatowanie czy nie zmieni nazwę pliku na taką jaka ma być.
P-124171
Krump
Temat założony przez niniejszego użytkownika
» 2015-01-05 01:00:40
Własnie je przejrzałem na wpół spiąć i tez nie widzę zastosowania, najbardziej twoje mi pomoze, ale jak pisąłem wyzej, jeszcze nie to, bo mi szarga cały kod. Jak sadzisz o moim pomyśle, jest realny? I jak go dobrze zaimplementować. Chodzi mi najbardziej o getline() do charów i potem chary do stringów, bo przesiew ASCII i podmiana to moja funkcja pol() ze zmianami.


A i jeszcze jedno! Tablica char musi być nieograniczona (stringi maja to domyślnie), bo w jednej linijce są dwie ścieżki (które rozdzielam po to mi .erase .substr itp) plus nowe windowsy nie maja ograniczenia ścieżek do 256 znaków.
P-124173
SocrateZ
» 2015-01-05 01:02:09
Tablicę zawsze możesz zwiększyć nawet do 4096
Tylko nie zapomnij zmienić wartości limit w funkcji add_utf8_to_ansi_string.

Rozwiązanie które przedstawiłem jest zrobione "na siłę". Problem można rozwiązać na pewno inaczej.
Niestety w tym momencie nic sensownego do głowy mi nie przychodzi.

Poprzednie teorie z wchar_t okazały się błędne. Wiem bo sprawdzałem.

PS: Co do tablicy końcowej, nie musisz mieć jej w stringu. Funkcja rename i tak przyjmuje tablicę znaków char.
P-124174
Krump
Temat założony przez niniejszego użytkownika
» 2015-01-05 07:24:57
Ale piszę, że na własnościach stringa opiera się cały mój algorytm przetwarzania danych, który nie należy do najprostszych, dlatego musi zostać. Coś z tym pokombinuje, chociaż liczyłbym na inną metodę, bardziej "nie na siłę".
P-124175
SocrateZ
» 2015-01-05 12:19:42
W linuksie nic nie musisz robić (nie ważne co zrobisz i tak wyjdzie dobrze). Co do windowsa, wszystko co potrzebujesz zostało już w tym wątku pokazane.
P-124196
Krump
Temat założony przez niniejszego użytkownika
» 2015-01-05 13:50:08
Tak, ale napisałeś, że to metoda na siłę trochę. Może jest prostszy lepszy sposób, bardziej zoptymalizowany, chciałbym, aby się wypowiedział ktoś inny kto robi w C++, chciałbym poznać parę metod. Poza tym to będzie trochę ciężko napisać.
P-124199
1 2 « 3 » 4 5
Poprzednia strona Strona 3 z 5 Następna strona