我正在通过传递包含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是字符串本身的前缀。为什么这样做,我该如何预防呢?
答案 0 :(得分:0)
我可以建议使用Path.IsPathRooted检查UNC路径,以查看.NET是否实际上同意这是绝对路径吗?如果不是,请尝试在字符串的开头查找“不可见”的多余字符。
也许像“标签”一样?