2016-07-28 5 views
0

В настоящее время я пишу программу для текстового редактора, однако у меня возникла проблема.Загрузить текстовый файл с помощью команды args

Я пытаюсь разрешить пользователю открывать файл с помощью моей программы, дважды щелкнув его, что достигается установкой программы по умолчанию. Мне сказали, что это отправляет программе filepath в качестве аргумента команды. Я использую это так:

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)); 

    } 

Однако, я постоянно получаю следующее сообщение об ошибке:

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

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

Если кто-то пожалуйста направить меня к фиксации этого, было бы весьма признателен. Кстати, весь исходный код находится на Github, github.com/Criticaldiamonds/asys

EDIT

Согласно MSDN, первый аргумент сама программа, а затем заданных пользователем аргументов , Поэтому

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

Поскольку отладчик VS ускользает символы, значение args[1]в отладчике является "C: \\ пользователи \\ \\ Desktop Джиованни \\ hello.txt"

+1

Что бы данные в аргументах [1] не представляет собой правильный путь. –

+0

Можете ли вы проверить, что такое значение строк через отладку? –

+0

@Ian Значение C: \\ Users \\ Giovanni \\ Desktop \\ Hello.txt Это связано с двойной обратной косой чертой? – criticaldiamonds

ответ

1

Вы должны использовать методы на System.IO.Path класса

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

I _would_ использовать это, но я все еще получаю 'Необработанное исключение типа 'System.NotSupportedException' произошло в mscorlib.dll Дополнительная информация: Формат данного пути не поддерживается.', Поэтому на данный момент я продолжу использовать моя версия – criticaldiamonds

+0

что отладчик говорит, что 'fullPath' установлен? –

+0

В вашем примере 'dirPath + '\\' + fiuleName 'должно быть таким же, как' Path.Combine (Path.GetDirectoryName (dirPath), Path.GetFileName (dirPath)) '. Как выглядит ваша командная строка? –

0

мне удалось решить проблему! Спасибо всем, кто оставил комментарии, они действительно помогли! Повсюду с настройками каталога я получил следующий код, который правильно загружает тестовый файл!

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

не делаем. Используйте функции 'Path.Combine'. –

+0

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

+0

@MatthewWhited для dirPath + '\\' + имя_файла, строка? – criticaldiamonds