2014-12-10 3 views
0

Мне недавно пришлось сделать кнопку на C#, которая просто должна была открыть текстовый файл. Работа была легкой, пока я не понял, что у меня нет идеи, как открыть файл, почему? Ну просто потому, что я не могу придумать способ «определить» имя пользователя в пути к файлу.Использование имени пользователя в качестве пути для открытия файла

Вот код, который я судимый использовать:

private void button5_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     System.Diagnostics.Process.Start("C:\\Users\\%USERNAME%\\AppData\\Roaming\\SchoolProject\\file.txt"); 
    } 
    catch { } 
} 

И это не сработало.

Так в чем же проблема? Если вам хочется узнать ответ, будьте очень откровенны в этом, я новичок в языках программирования, и я не совсем понимаю коды так хорошо. (Если вы не можете, и если это не слишком много, чтобы спросить, пожалуйста, укажите код, который должен работать в своем ответе.)

+2

Вы пробовали 'echo% userprofile%'? Должно быть понятно, почему ваш код не работает, если вы это сделаете. – Blorgbeard

+2

И удаление этого пустого блока catch также даст вам некоторые подсказки. – Blorgbeard

ответ

1

Вам необходимо расширить переменные среды использования: Environment.ExpandEnvironmentVariables

Заменяет имя каждого переменного окружения вложенных в указанной строки с строковым эквивалентом значения переменной , затем возвращает получившуюся строку.

Environment.ExpandEnvironmentVariables("C:\\Users\\%USERPROFILE%\\AppData\\Roaming\\SchoolProject\\file.txt"); 

Это даст вам точный путь.

Так что ваш код может быть:

string filePath = Environment.ExpandEnvironmentVariables("C:\\Users\\%USERPROFILE%\\AppData\\Roaming\\SchoolProject\\file.txt"); 
System.Diagnostics.Process.Start(filePath); 

Кроме того, наличие пустой try-catch не поможет вам в определении исключения, поймать конкретное исключение или, по крайней мере, базовый класс Exception, а затем вы можете войти/смотреть в отладчик, за исключением и его сообщение.

+1

Не знаете, почему вы получили вниз. +1 для того, чтобы научить меня тому, что я не знал, что вы могли бы сделать. – BradleyDotNET

+1

Он отлично работал, спасибо вам большое. – VeryIpsum

1

Вы можете добраться до всех этих «специальных» местах папки через Environment.SpecialFolders перечисления и метода GetFolderPath.

В вашем случае вы хотите SpecialFolder.ApplicationData. Что-то вроде:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "test.txt"); 

Все специальные папки могут быть найдены на MSDN.