12. januar 2012 - 17:51Der er
8 kommentarer og 1 løsning
Eksekverer Kommando i Prompt
Hej Eksperter
Cs2cs er et koordinat transformations command line tool. Læs koordinater fra 1 fil, transformer og skriv resultat til 1 anden fil.
Mit spørgsmål handler om hvordan jeg kan kalde dette command line tool fra C#.
Jeg forsøger at fyre følgende linie af i en kommando prompt: cs2cs +proj=latlong +datum=WGS84 +to +proj=utm +zone=32 +ellps=intl +units=m +no_defs +towgs84=-87,-96,-120 SomePath\input.txt > SomePath\out.txt
(SomePath = Fuldstændig sti til en mappe)
Når jeg kører kommandoen manuelt i en prompt virker det uden problemer. cs2cs.exe er tilføjet til min PATH variabel og der genereres en out.txt baseret på input.txt.
Når jeg forsøger at gentage success'en inde fra C#, så er resultatet blot en tom out.txt.
Der bliver genereret en out.txt, så det må betyde, at cs2cs har været kørt. Men da filen er tom, og jeg ikke får nogen info om evt. fejl beskeder, så er jeg kørt en smule fast.
Jeg har tidligere leget med at redirecte output fra processen, men mener ikke, at det gav bonus.
Nu prøvede jeg igen, og har nu efter trial and error opdaget, at hvis jeg starter cs2cs i stedet for cmd.exe, så bliver cs2cs resultatet skrevet til redirected output stream. Step 2 er så at jeg selv generere output filen.
StreamWriter outWriter = new StreamWriter(Path.Combine(tempDir, "out.txt")); outWriter.Write(s); outWriter.Flush(); outWriter.Close();
Jeg får desværre 2 fejl skrevet ud i konsollen fra cs2cs. En fejl 2 og en fejl 22. Jeg kan ikke umiddelbart finde fejlkode beskrivelser for cs2cs, og da koordinaterne ser fornuftige ud, så regner jeg ikke med at grave dybere.
Jeg synes stadig det er magisk/mystisk, at cs2cs ikke laver out.txt, men i stedet smider output til redirected output stream.
Fejl 2 plejer i øvrigt at være "File not found". cs2cs skriver jo bare til stdout (som f.eks. Console.WriteLine()) det er normal opførsel fra et kommandolinieprogram, så man kan pipes og redirects. Det er din shell (cmd.exe) som skal håndtere redirects ikke cs2cs.
Men fint du fik det til at virke! Husk at dispose din Process.
Arne: Min oprindelige plan med at starte cmd.exe og køre cs2cs besværgelsen, medførte netop, at der blev oprettet en out.txt. Så via cmd virker < logikken. Output filen var dog tom og jeg fik ingen fejlbeskeder.
bvli: Er det nødvendigt at kalde Dispose - det skal man da aldrig i managed kode?
Jeg kan se, at der findes en Close metode på en Process - den er nok fornuftig at indsætte.
Det lyder lidt som om det program er lidt sensitiv - og en fejl kunne nemt resultere i en tom output fil.
Synes godt om
Slettet bruger
16. januar 2012 - 20:34#9
Det kunne være interessant at vide om den skrev noget ud på stderr med 2> Måske bliver miljøvariablerne ikke overført?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.