2014-12-02 2 views
2

У меня есть метод, чтобы получить путь к папке конкретного файла:Поймать «FileNotFoundException»

string filePath = Path.Combine(Environment.GetFolderPath(
       Environment.SpecialFolder.MyDocuments), "file.txt"); 

И потом, я использую это, чтобы читать текст в файле:

StreamReader rdr = new StreamReader(filePath); // "C:\Users\<user>\Documents\file.txt" 
     string myString = rdr.ReadToEnd(); 

Trouble если файл не существует, он выдает FileNotFoundException (очевидно). Я хочу, надеюсь, использовать if/else, чтобы поймать ошибку, в которой пользователь может найти файл напрямую, но я не уверен, что использовать, чтобы проверить, действительно ли filePath действителен или нет.

Например, я не могу использовать:

if (filePath == null) 

, потому что верхний способ получения строки всегда будет возвращать значение, независимо от того, является ли оно действительным. Как я могу это решить?

+7

'если (! File.Exists (Filepath))' – MarcinJuraszek

+0

@MarcinJuraszek: что происходит, когда файл был удален между Exists() возвращала истинное и доступа к файлам попытка была сделана? – abatishchev

+1

Почему бы вам также не уловить исключение ** и позволить пользователю выбрать новый файл? –

ответ

1

Вы можете использовать File.Exists: -

if(File.Exists(filePath)) 
{ 
    //Do something 
} 
else 
{ 

} 
2

Хотя File.Exists() подходит в качестве начала, обратите внимание, что игнорирование исключения все еще может привести к состоянию ошибки, если файл становится недоступным (упала сетевой диск, открытый файл другой программой, удаленной и т. д.) за время между вызовом File.Exists() и new StreamReader().

0
string filePath = Path.Combine(Environment.GetFolderPath(
       Environment.SpecialFolder.MyDocuments), "file.txt"); 

if(!File.Exists(filePath)) 
{ 
/* browse your file */ 
} 
else 
{ 

     StreamReader rdr = new StreamReader(filePath); // "C:\Users\<user>\Documents\file.txt" 
     string myString = rdr.ReadToEnd(); 
} 
Смежные вопросы