2016-11-26 5 views
1

У меня есть реализация StreamReader.C# StreamReader (строковый путь). Является ли путь доступным снова как-то?

internal class MyStreamReader : StreamReader 
{ 
    public MyStreamReader (string path) : base(path) 
    { 
    } 

Аргумент - это путь к файлу.

Я хотел исключить исключение и включить полное имя файла в его сообщение. Я знаю, конечно, что я мог бы легко сохранить его в поле своего класса, например «_path», но я хотел убедиться, что я не делаю ничего лишнего. Как-то я могу снова получить доступ к аргументу «путь»?

Edit, так как там, кажется, некоторая путаница:

throw new FileLoadException($"Corrupt source file! File '{ // I need something to represents the file with its path }' is malformed. (...)"); 

Итак, // I need something to represent the file with its path легко заменяемые без добавления поля _path в моем классе. Что-то вроде this.GetTheInConstructorArgumentedPath().

+0

Класс Исключение имеет поле Данные, в которых вы можете добавить пару имя-значение, а затем получить его. –

+0

Вместо использования базового класса 'Exception' - создайте собственное' WrongFileNameException', которое наследует от 'Exception' и добавляет туда любые данные. Это даст вам более подробную информацию о заброшенном исключении. И вы можете поймать это исключение с помощью 'catch (WrongfileNameException)' – Fabio

+0

@Fabio Это абсолютно не то, о чем я просил. Я собираюсь разъяснить это. – OddDev

ответ

1

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

(this.BaseStream as FileStream).Name 
+0

Работает как очарование. Я добавил nullcheck: var fileStream = this.BaseStream как FileStream; if (fileStream! = Null) – OddDev