Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
krepsy3
Redaktor
Avatar
krepsy3:15.11.2016 23:00

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.11.2016 23:00
Odpovědět 15.11.2016 23:00
Programátor je stroj k převodu kávy na kód.
Avatar
HONZ4
Člen
Avatar
HONZ4:16.11.2016 18:14

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

 
Nahoru Odpovědět 16.11.2016 18:14
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na HONZ4
krepsy3:16.11.2016 21:46

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.11.2016 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#:16.11.2016 22:10

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.11.2016 22:10
Avatar
krepsy3
Redaktor
Avatar
krepsy3:16.11.2016 23:45

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.11.2016 23:46
Nahoru Odpovědět  +2 16.11.2016 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.