2016-06-17 11 views
-1

Ich muss ein kleines Konsolenprogramm schreiben, um einige Inhalte in AppData/Local zu kopieren.C# - Process.StartInfo.Arguments - Pfad mit Verzeichnis mit Leerzeichen

Als Quelle habe ich einen Ordner mit einem Leerzeichen darin. Lass es "Mein Ordner" nennen. Mein Ordner enthält Unterordner und andere Inhalte.

So habe ich ./MyFolder und ich muss es C kopieren: \ Users \ Name \ AppData \ Local \ My Folder

Nun, was ich getan habe:

  1. Ich weiß, , dass mein Ordner existiert in ./

  2. Ich kann auf AppData zugreifen, weil ich vor dem Kopieren einige alten trashy My Folder entfernen muss, die zuvor erstellt wurden.

  3. Ich habe Administratorrechte.

Und jetzt habe ich diesen Code-Schnipsel:

Process process = new Process(); 
process.StartInfo.FileName = "xcopy"; 

string stringsource = @"./My Folder"; 
string stringdestination = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
string all = stringsource + " " + stringdestination + " /e /h /c /I"; 
/*this is for testing, resulting in CORRECT string path*/ 
Console.WriteLine(all); 
process.StartInfo.Arguments = all; 
process.Start(); 

Dies ist in try/catch-Block und die Ergebnisse ohne Fehler. Aber im Ziel AppData/Local gibt es keinen neuen Mein Ordner.

Ich habe auch versucht:

string stringsource = "./My Folder"; 
string all = @""+stringsource + " " + stringdestination + "/e/h/c/I"; 

Ich habe auch versucht:

process.StartInfo.Arguments = @"./My Folder "+Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+ /e/h/c/I"; 

Ich habe auch versucht:

process.StartInfo.Arguments = @"'./My Folder' "+Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+ /e/h/c/I"; 

keiner von ihnen arbeitete. Selbst wenn beim Kopieren kein Fehler auftritt, wird kein Inhalt kopiert. Was ist hier bitte falsch?

+0

Was mit allen Räumen ist nach den Schrägstrichen ist erforderlich? Außerdem verwendet Windows einen umgekehrten Schrägstrich als Pfadtrennzeichen. – ths

+0

Versuchen Sie, Angebote hinzuzufügen. Da Sie '@' verwenden, tun Sie dies, indem Sie 2 Anführungszeichen überall dort einfügen, wo ein Zitat angezeigt werden soll: 'process.StartInfo.Arguments = @" "" ./ Mein Ordner "" "+ ...'. Ohne '@' entkommst du es mit '\': 'process.StartInfo.Arguments =" \ "./ Mein Ordner \" "+ ...". – Quantic

+0

geändert ./ zu. \ Und immer noch nicht funktioniert .... Auch ich habe die Leerzeichen zwischen/e .... und wieder versäumt, versuchte beide Varianten mit ./ und. \ ... und immer noch nicht funktioniert – Zorak

Antwort

0

@Quantic danke für den Kommentar, das war der Schlüssel (oder eher ein Hinweis oder führen) für die Lösung.

Was funktioniert, ist:

string all = @"""./My Folder"" """ + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"My Folder") + "\" /e /h /c /I"; 

, die in String-Pfad im Format führt, die als Eingabe für xcopy Werkzeug

"./My Folder" "C:\Users\Name\AppData\My Folder" /e /h /c /I