2017-02-04 3 views
0

Ich habe eine Nudel RubbelGetCommandLineArgs geben falschen Pfad von Netzwerkpfad mit Leerzeichen

ich einen Dateinamen in der Befehlszeile Argumente greifen will - das Programm aufgerufen wird, über das Kontextmenü (rechte Maustaste) und Aufruf zu tun das wird es der Registrierung usw. hinzugefügt usw.

Es funktioniert gut auf lokalen Dateien auf beschrifteten Laufwerken, aber wenn ich es gegen eine Netzwerkadresse ausführen, die Leerzeichen enthält, traf ich ein Problem.

heißt „\\ server \ Testordner \ filename.txt“

Wenn es keine Räume gibt es scheint, den richtigen Pfad zurückzukehren. Wenn sich im Verzeichnis oder im Dateinamen Leerzeichen befinden, wird diese Komponente in Jibberish umgewandelt. Bilder

Beispiel:

Path with spaces
\\192.168.0.200\Web\1K5SXZ~6\T5MSMN~1.TXT

Path without spaces
\\192.168.0.200\Web\testdirectory\testfile.txt

-Code verwendet:

string[] args = Environment.GetCommandLineArgs(); 

foreach (string a in args) 
{ 
    MessageBox.Show(a); 
} 

Irgendwelche Gedanken?

Thx E

Antwort

0

Dies geschieht, weil, wenn die ausführbare Datei mit einem Argument mit Leerzeichen genannt hätten, würden Sie nicht in der Lage sein zu unterscheiden, ob es zwei Argumente oder ein:

myapp.exe \foo bar\baz

Könnte sein interpretiert als \foo und \bar\baz (2 Argumente, weil es ein Leerzeichen gibt) anstelle der (beabsichtigten) \foo bar\baz; in der Regel umgeben Sie einfach den Pfad mit Anführungszeichen um dies zu verhindern:

myapp.exe "\foo bar\baz"

ich explorer denke nur die sichere (r) Route * nimmt und verwendet einfach die 8.3 filename die nie Leerzeichen enthalten sowieso und damit entfernen Sie die Notwendigkeit für Angebote.

Siehe here für mehr; wenn Sie die LFN (lange Dateinamen) wollen es einfach, ihn zurückzubekommen:

string[] args = Environment.GetCommandLineArgs(); 

foreach (string a in args) 
{ 
    MessageBox.Show(new FileInfo(a).FullName); 
} 

* Eigentlich; Ich denke, vielleicht Explorer tut dies, weil es keine Möglichkeit hat, zu wissen, ob es eine "LFN bewusst" -Anwendung aufruft. Aber das ist nur (nicht gut durchdachte) Spekulation meinerseits.

+0

Spot auf - das hat es gelöst. Vielen Dank! –

-1

Ich würde versuchen, keine Abstände für Ordner/Dateinamen überhaupt zu verwenden, aber soweit ich weiß, sollte dies funktionieren.

@ "\ server \ testordner \ filename.txt";

+0

(NB: Nicht mein Downvote!).Es ist 2017; es sei denn, es gibt eine sehr spezifische alte Legacy-Anwendung, mit der Sie unbedingt arbeiten müssen. Es gibt keinen Grund, die Verwendung von Leerzeichen in Pfaden zu empfehlen. das ist lächerlich. – RobIII

Verwandte Themen