Entwickler-Ecke

C# - Die Sprache - Windowspfade als Befehlzeile - Backslash


Molchi - Di 11.05.10 15:01
Titel: Windowspfade als Befehlzeile - Backslash
Hallo zusammen!

Ich habe ein Problem mit einem C#-Programm. Es soll Windowspfade als Befehlszeilenargumente entgegennehmen. Folgendes Problem tritt auf. Ich übergebe einen Pfad wie

D:\mein_ordner\meine_datei.txt

In args[i] sieht der String dann dummerweise so aus:

D:\\mein_ordner\\meine_datei.txt

d.h. die Backslashes sind verdoppelt. Das Problem tritt auch auf, wenn ich das Argument bei der Übergabe in Anführungszeichen setze.

Hat jemand einen Tipp, wo hier der Hund begraben liegt?

Danke!


jaenicke - Di 11.05.10 15:08

Hallo, :welcome: im Forum!

Also in C# selbst kannst du das mit einem @ vor dem String vermeiden. Dass das bei den Argumenten auch so ist, wusste ich nicht, aber vielleicht ist das da ähnlich.


JüTho - Di 11.05.10 15:14

Hallo und :welcome:

user profile iconMolchi hat folgendes geschrieben Zum zitierten Posting springen:
In args[i] sieht der String dann dummerweise so aus:
D:\\mein_ordner\\meine_datei.txt
d.h. die Backslashes sind verdoppelt.

Das ist ein grobes Missverständnis. Im String, also auch in args[i], enthält der String an den betreffenden Stellen einen Backslash. Du schreibst selbst "er sieht so aus". Nur zur Anzeige innerhalb von Code oder im Debugger erhält er noch das Escape-Zeichen '\' und sieht dadurch verdoppelt aus.

Im Wikibook [http://de.wikibooks.org/wiki/Arbeiten_mit_.NET:_Grundlagen:_C-Sharp/_Zeichen_und_Zeichenketten] habe ich das ausführlich erklärt, siehe vor allem den Abschnitt "Eingabe im Code".

Jürgen

@Sebastian
Wenn er das bei den Argumenten so sieht, dann kann er sich eigentlich nur auf den Debugger beziehen. Sobald er args[i] an eine "echte" Ausgabe gibt (Console, Label.Text oder sonstwas), steht selbstverständlich nur ein Backslash da.


Molchi - Di 11.05.10 15:19

Vielen Dank! Ja, es war in der Tat ein Missverständnis. Ich hatte mich daran festgebissen und übersehen, dass der Wurm nichts mit den (völlig korrekt übergebenen) Pfaden zu tun hatte, sondern in meinem eigenen Programmcode zu suchen war. Das Problem saß also mal wieder zwischen Bildschirm und Stuhllehne :-)

Grüße

Mario