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'?
我正在通过传递包含 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'?