【问题标题】:The string was not recognized as a valid uri该字符串未被识别为有效的 uri
【发布时间】:2019-01-16 05:47:52
【问题描述】:

当我运行我的方法时,我得到了错误:

System.ArgmentException: 该字符串未被识别为有效的 uri

private void loadXMLBttn_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog selectConfigFile = new OpenFileDialog();
    selectConfigFile.Title = "Select an existing XML config file...";
    selectConfigFile.InitialDirectory = @"C:\";
    selectConfigFile.DefaultExt = ".xml";
    selectConfigFile.Filter = "xml files|.xml|All files (*.*)|*.*";
    var selectedFile = selectConfigFile.SafeFileName;
    selectConfigFile.ShowDialog();
    XDocument configFile = XDocument.Load(selectedFile);
}

【问题讨论】:

    标签: c# xml wpf


    【解决方案1】:

    您收到此异常是因为您的 selectedFile 变量从未真正填充。

    您需要填充selectedFile 变量之后显示对话框并允许用户选择 XML 文件:

    selectConfigFile.ShowDialog();
    var selectedFile = selectConfigFile.SafeFileName;
    XDocument configFile = XDocument.Load(selectedFile);
    

    【讨论】:

    • 啊,明白了。谢谢
    【解决方案2】:

    是的,问题是您在显示对话框之前设置了 selectedFile。如果您将代码重写为这种方式,则问题可以100%解决:

    private void loadXMLBttn_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog selectConfigFile = new OpenFileDialog()
        {
            Title = "Select an existing XML config file...",
            InitialDirectory = @"C:\",
            DefaultExt = "*.xml",
            Filter = "XML files|*.xml|All files (*.*)|*.*"
        };
        if (selectConfigFile.ShowDialog() == true)
        {
            var selectedFile = selectConfigFile.FileName;
            XDocument configFile = XDocument.Load(selectedFile);
        }
    }
    

    这将修复一个过滤器,该过滤器在您的示例中不起作用,它使文件对话框选项初始化程序更加清晰。此外,如果用户不选择任何文件 - 它不会尝试加载空字符串路径

    【讨论】:

    • 我尝试了您的示例,但出现 Syste.IO.FileNotFoundException 出现错误。看起来它没有正确选择文件并尝试从我的 Visual Studio 存储库中加载。
    • @TomD,我已经更新了答案,将 SafeFileName 替换为 FileName。因为 SafeFileName 只包含一个没有完整路径的名称
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多