StreamReader 构造函数在 UNC 前加上工作目录

StreamReader constructor prefixes UNC with working directory

我正在通过传递包含 UNC 路径的字符串来初始化 System.IO.StreamReader,但是 StreamReader ctor 将工作目录作为 UNC 路径的前缀,导致 System.IO.DirectoryNotFoundException。

UNC 路径存储在 applicationSettings 中,值为:

‪    \networkShareMachine\Projects\hold\tst.csv

我正在使用以下方法从 applicationSettings 获取 UNC:


    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

然后,我通过将 UNC 值传递给 ctor 来新建一个 StreamReader:


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

我希望流 reader 像其他任何时候一样被初始化,除了我得到

System.IO.DirectoryNotFoundException. 

原因是因为 UNC 以工作目录为前缀,如下所示:

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

似乎 StreamReader ctor 正在为字符串本身添加前缀。为什么会这样,我该如何预防?

我能否建议使用 Path.IsPathRooted 检查您的 UNC 路径,看看 .NET 是否真的同意它是绝对路径?如果不是,请尝试在字符串的开头查找 "invisible" 个额外字符。

可能像 'tab'?