2013-10-27 3 views
0

Я пытаюсь открыть текстовый файл (example.txt), который находится на рабочем столе с StreamReader. Но когда я запускаю свой код, появляется сообщение об ошибке, которое он выбрал: Не удалось найти файл (любой путь к коду, ведущий весь путь к папке отладки в моем проекте). Так что мне интересно, Streamder не тот инструмент для работы?Как открыть файл, который находится на рабочем столе

Это код, который я использую.

Console.WriteLine("What file would you like to load?"); 
string FileName = Console.ReadLine(); 

StreamReader Reader - new StreamReader(FileName); 

Исключение брошено в StreamReader

ответ

4

Вполне вероятно, что ваша программа не может найти файл, потому что он смотрит в неправильном месте. Вы можете исправить, что-то вроде этого ...

private void ReadFromDesktop(string fileName) 
    { 
     string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     string fullName = System.IO.Path.Combine(desktopPath, fileName); 
     using (StreamReader steamReader = new StreamReader(fullName)) 
     { 
      string content = steamReader.ReadToEnd(); 
     } 
    } 

Этот метод принимает имя файла (предположительно, что вы вошли на консоль), а затем запрашивает среды для пути на рабочем столе.

Затем он использует метод Path.Combine для создания полного имени файла. Результат обрабатывается считывателем потока.

Дело в том, что если вы укажете только имя файла, приложение будет выглядеть в его корневом каталоге (который, как вы писали, отладочной директории). Подсказка для этого была сообщением об ошибке, в котором говорилось, что он создал полный путь, используя имя вашего каталога отладки.

+0

Это сделало трюк. Спасибо. –

2

Попробуйте вместо этого:

var reader = File.OpenText(FileName); 

Или для маленьких файлов:

var allText = File.ReadAllText(FileName); 

Конечно ... это всегда возможно Имя_файла указано НЕ существует на самом деле .... правильно? Я имею в виду, что по умолчанию он, вероятно, будет искать файл локально рядом с .exe, который будет в /.../.../bin/debug/ или что-то в этом роде.

Если вы специально хотите искать файл на рабочем столе папку текущего пользователя, вам может понадобиться:

var fullPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\" + FileName; 
var allText = File.ReadAllText(fullPath); 
0

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

Если файл существует, и вы используете абсолютный путь (начиная с буквы диска на окнах), вы должны быть в состоянии сделать что-то вроде этого:

 Console.WriteLine("What file would you like to load?"); 
     string fileName = Console.ReadLine(); 

     using (Stream reader = new StreamReader(fileName)) 
     { 
      string line = reader.ReadLine(); 
      // ... 
     } 
+0

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

1

«Не удалось найти файл» на самом деле то, что было получилось. Обратите внимание на детали исключения и проверьте, что вы вводите существующее имя файла вместе с расширением. Также не забудьте расположить StreamReader:

string text; 
    var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), fileName); 
    using (var sr = new StreamReader(path)) 
    { 
     text = sr.ReadToEnd(); 
    } 
Смежные вопросы