StreamReader构造函数以工作目录为UNC前缀

时间:2019-05-20 23:16:50

标签: c# .net streamreader unc

我正在通过传递包含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告诉我“设置”变量的值正确,但反斜杠加倍:

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

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

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


    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 :(得分:0)

我可以建议使用Path.IsPathRooted检查UNC路径,以查看.NET是否实际上同意这是绝对路径吗?如果不是,请尝试在字符串的开头查找“不可见”的多余字符。

也许像“标签”一样?