Avatar
krepsy3
Redaktor
Avatar
krepsy3:

Ahoj, mám takový speciální dotaz, týkající se složky s diakritikou (jedná se o uživatelskou složku, jako příklad budu používat C:\Users\Kája\Do­cuments). V mém programu zapisuji do textového souboru takto:

string cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "soubor.txt");
if (Environment.GetCommandLineArgs().Length > 1)
{
        if (Directory.Exists(Environment.GetCommandLineArgs()[1]))
                cesta = Path.Combine(Environment.GetCommandLineArgs()[1], "soubor.txt");
}

{
        /*Zápis*/
}

Jde o to, že pokud chci změnit složku právě přes command line argumenty, není to problém v cmd, prostě tam napíšu

<C:\Users\Kája\Documents\Programy>start prg.exe C:\Users\Kája\Documents\Texty\

A složka se v pořádku změní. Problém nastává u dávkového souboru (.bat), který chci mít vedle programu. Jeho obsah:

@echo off
start prg.exe C:\Users\Kája\Documents\Texty\
exit

Pokud kód výše uložím do .bat jako ANSI nebo UTF-8, složka se bohužel (nejspíš kvůli diakritice) v programu nezmění.
Pokud ho uložím do Unicode, batch nefunguje a ihned se terminuje s tím, že "(nějaké podivné znaky) není rozponán jako interní příkaz či soubor."

Co s tím? Nepište prosím, ať si změním jméno uživatelské složky, hlavně chci, aby to program nebo batch zvládal. Najdou se i jiní uživatelé s diakritikou ve složkách, a tak chci, abych to uměl zvládnout programově ;)

Editováno 15. listopadu 23:00
Odpovědět 15. listopadu 23:00
Programátor je stroj k převodu kávy na kód.
Avatar
HONZ4
Člen
Avatar
HONZ4:

sice tomu nerozumím, ale nepomůže ti toto vlákno?

 
Nahoru Odpovědět 16. listopadu 18:14
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na HONZ4
krepsy3:

No, moc ne. Jde o to, že uložený batch v Unicode nefunguje. V jiných znakových sadách program přečte nesmyslnou cestu, po čemž použije tu výchozí. Koukal jsem na třídu Encoding, ale ta nejde použít na cestu k souboru :(

Nahoru Odpovědět 16. listopadu 21:46
Programátor je stroj k převodu kávy na kód.
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na krepsy3
Lukas C#:

Tady je vlákno o tom - vypadá to, že CMD - batch je jeden velký bugfest, anebo to prostě není implementované. Vyřešil bych to nějak jinak, třeba vedle programu si dal txt soubor, kde budou ty jména složek a souborů, které chceš zpracovat. Tvoje .exe to pak přečte

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 16. listopadu 22:10
Avatar
krepsy3
Redaktor
Avatar
krepsy3:

Tak pro shrnutí - řešení bylo na dané adrese k nalezení. Protože aplikaci spouštíte pod windows, kde si přirozeně jako Češi nastavíte české kódování, jsou tyto znaky ve výchozím nastavení systému brány ze sady Windows-1250, ve které čte i náš c# program. V Batchi nastavujete znakovou sadu příkazem chcp.
Finální batch má tedy následující podobu:

@echo off
chcp 1250
start C:\Users\Kája\Documents\Texty\
exit
Editováno 16. listopadu 23:46
Nahoru Odpovědět  +2 16. listopadu 23:45
Programátor je stroj k převodu kávy na kód.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.