Конструктор StreamReader префикс UNC с рабочим каталогом - PullRequest
0 голосов
/ 21 мая 2019

Я инициализирую System.IO.StreamReader, передавая строку, содержащую путь UNC, но ctor StreamReader добавляет префикс UNC к рабочему каталогу, что приводит к исключению System.IO.DirectoryNotFoundException.

UNC-путь хранится в applicationSettings со значением:

‪    \\networkShareMachine\Projects\hold\tst.csv

Я получаю UNC из applicationSettings, используя это:


    public static object GetValue(string settingName)
        {
            object result = null;
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            // find section
            ClientSettingsSection configSection = config.SectionGroups[@"applicationSettings"].Sections["VCM.WPF.Properties.Settings"] as ClientSettingsSection;

            var setting = configSection.Settings.Get(settingName).Value.ValueXml.InnerText;

            result = setting;
            return result;
        }
    }

Intellisense сообщает мне значение "переменная "setting" является правильной, за исключением случаев с удвоенными обратными слешами:

    string setting = (string)Utils.SettingsReader.GetValue("CSVLocation");

    \\\\networkShareMachine\\Projects\\hold\\tst.csv

Затем я запускаю StreamReader, передавая значение UNC в ctor:


    using (var streamReader = new StreamReader(path: setting))
    {
        ...
    }

Я ожидаюпотоковый ридер должен быть инициализирован так же, как и в любое другое время, за исключением того, что я получаю

System.IO.DirectoryNotFoundException. 

Причина в том, что UNC имеет префикс рабочего каталога следующим образом:

'C:\Users\userName\source\repos\VCM\VCM.Models.Test\bin\Debug\‪\networkMachineName\Projects\hold\tst.csv'

Кажется, что StreamReader ctor является префиксом самой строки.Почему он это делает и как я могу предотвратить это?

1 Ответ

0 голосов
/ 21 мая 2019

Могу ли я предложить проверить ваш UNC-путь с помощью Path.IsPathRooted, чтобы увидеть, действительно ли .NET соглашается, что это абсолютный путь?Если это не так, попробуйте поискать «невидимые» дополнительные символы в начале строки.

Как, например, «табуляция»?

...