2016-07-28 11 views
0

Ich schreibe gerade ein Texteditor Programm, aber ich habe ein Problem festgestellt.Lade Textdatei mit Befehl Args

Ich versuche, dem Benutzer zu ermöglichen, eine Datei mit meinem Programm zu öffnen, indem Sie auf es doppelklicken, was durch Festlegen des Standardprogramms erreicht wird. Mir wurde gesagt, dass dies das Programm den Dateipfad als Befehlsargument sendet. ich es so bin mit:

private void formMain_Load(object sender, EventArgs e) 
    { 
     string[] args = System.Environment.GetCommandLineArgs(); 
     string filePath = args[1]; 
     addTab(); 
     getFontCollection(); 
     setFontSizes(); 
     getCurrentDocument.Text = (File.ReadAllText(filePath)); 

    } 

Allerdings habe ich den folgenden Fehler konsequent erhalten:

An unhandled exception of type 'System.NotSupportedException' occurred in mscorlib.dll 

Additional information: The given path's format is not supported. 

Wenn jemand mir bitte direkt, dies zu Festsetzung würde, wäre es sehr geschätzt. Durch die Art und Weise wird die gesamte Quellcode auf Github befindet, github.com/Criticaldiamonds/asys

EDIT

MSDN Entsprechend ist das erste Argument das Programm selbst, vom Benutzer angegebenen Argumenten gefolgt von . Daher

args[0] = the program 
args[1] = "C:\users\Giovanni\Desktop\Hello.txt" (w/o quotes ofc) 

Da der VS-Debugger Zeichen entkommt, den Wert von args[1]im Debugger ist "C: \\ Benutzer \\ Giovanni \\ Desktop-\\ Hello.txt"

+1

Was auch immer in args war Daten [1] stellt keinen gültigen Pfad. –

+0

Können Sie überprüfen, was der Zeichenfolgenwert durch das Debuggen ist? –

+0

@Ian Der Wert ist C: \\ Benutzer \\ Giovanni \ Desktop \ Hallo.txt Hat es mit den doppelten Backslashes zu tun? – criticaldiamonds

Antwort

1

sollten Sie die Methoden verwenden, um auf der System.IO.Path Klasse

private void Form1_Load(object sender, EventArgs e) 
{ 
    var args = System.Environment.GetCommandLineArgs(); 
    // using linq here reduces that array count check then extract 
    var argPath = args.Skip(1).FirstOrDefault(); 
    if (!string.IsNullOrEmpty(argPath)) 
    { 
     // Your .LoadFile(...) method requires a full path 
     var fullPath = Path.GetFullPath(argPath); 
     /* this part isn't needed unless you want to ensure the directory exists... but if it doesn't exist you can't open it anyway 
     var dirPath = Path.GetDirectoryName(fullPath); 
     if (!Directory.Exists(dirPath)) 
      Directory.CreateDirectory(dirPath); 
     */ 
     /* this isn't needed since you are using the full path 
     Directory.SetCurrentDirectory(dirPath); 
     */ 
     addTab(); 
     getFontCollection(); 
     setFontSizes(); 
     getCurrentDocument.LoadFile(fullPath, RichTextBoxStreamType.PlainText); 
    } 
} 
+0

Ich _would_ verwenden, aber ich bekomme immer noch eine unbehandelte Ausnahme vom Typ 'System.NotSupportedException' aufgetreten in mscorlib.dll Zusätzliche Informationen: Das Format des angegebenen Pfades wird nicht unterstützt.', so für jetzt werde ich weiterhin verwenden meine Version – criticaldiamonds

+0

Was sagt der Debugger 'fullPath' ist auf? –

+0

In Ihrem Beispiel sollte 'dirPath + '\\' + fuleName 'mit' Path.Combine (Pfad.GetDirectoryName (dirPath), Pfad.GetFileName (dirPath)) 'übereinstimmen. Wie sieht Ihre Befehlszeile aus? –

0

ich es geschafft um das Problem zu lösen! Danke an alle, die Kommentare hinterlassen haben, sie haben wirklich geholfen! Durch Herumspielen mit Verzeichniseinstellungen, endete ich mit dem folgenden Code, der die Testdatei korrekt lädt!

private void formMain_Load(object sender, EventArgs e) 
{ 
    string[] args = System.Environment.GetCommandLineArgs(); 
    string dirPath = args[1]; 
    string fileName = ""; 
    fileName = Path.GetFileName(dirPath); 
    dirPath = dirPath.Substring(3); 
    dirPath = Path.GetFullPath(dirPath); 
    if (dirPath.Contains('\\')) dirPath = dirPath.Substring(0, dirPath.LastIndexOf('\\')); 
    Directory.SetCurrentDirectory(dirPath); 
    addTab(); 
    getFontCollection(); 
    setFontSizes(); 
    getCurrentDocument.LoadFile(dirPath + '\\' + fileName, RichTextBoxStreamType.PlainText); 
} 
+1

tun Sie dies nicht. Verwenden Sie die 'Path.Combine'-Funktionen. –

+0

https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx –

+0

@MatthewWhited für den dirPath + '\\' + Dateiname, Zeile? – criticaldiamonds