Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过网络访问XML文件_C#_Xml_Winforms - Fatal编程技术网

C# 通过网络访问XML文件

C# 通过网络访问XML文件,c#,xml,winforms,C#,Xml,Winforms,我已经为这个管理应用程序工作了几个星期了,它几乎完成了。当用户单击save按钮时,将调用VerifyFields()方法。之后,它应该询问用户是否要保存并发送电子邮件。一旦用户单击Yes,它就应该向XML文件中的电子邮件地址发送电子邮件。我收到错误消息“在:\fs01\Applications\EMS Manager中找不到文件:DREmailAddresses.xml”。但是,该文件存在并且可以访问。我已经复制了下面的相关代码以及一个 如果您收到该错误消息,那么您的代码将通过对File.Exi

我已经为这个管理应用程序工作了几个星期了,它几乎完成了。当用户单击save按钮时,将调用VerifyFields()方法。之后,它应该询问用户是否要保存并发送电子邮件。一旦用户单击Yes,它就应该向XML文件中的电子邮件地址发送电子邮件。我收到错误消息“在:\fs01\Applications\EMS Manager中找不到文件:DREmailAddresses.xml”。但是,该文件存在并且可以访问。我已经复制了下面的相关代码以及一个


如果您收到该错误消息,那么您的代码将通过对File.Exists的检查并通过对文档的读取,但只需点击“If(emailDocument.Name==”DRPendingAddemail“)检查的else分支

所以你的函数应该接近这个

public Array AddEmail()
{
    string[] dRemail = { "", "", "" };
    if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"))
    {
        XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml");
        while (emailDocument.Read())
        {
            var type = emailDocument.NodeType;
            switch (type)
            {
                case XmlNodeType.Element:
                    if (emailDocument.Name == "DRCreatedAddEmail")
                    {
                        dRemail[0] = emailDocument.ReadInnerXml();
                    }
                    else if (emailDocument.Name == "DRActionNeededAddEmail")
                    {
                        dRemail[1] = emailDocument.ReadInnerXml();
                    }
                    else if (emailDocument.Name == "DRPendingAddEmail")
                    {
                        dRemail[2] = emailDocument.ReadInnerXml();
                    }
                    else
                    {
                        MessageBox.Show("Unknown node type " + emailDocument.Name);
                    }
                    break;
            }
        }
    }
    else
    {
         MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager");
    }
    return dRemail;
}

不是答案,而是说“从.NET Framework 2.0开始,我们建议您使用XmlReader.create方法来创建XmlReader实例,以利用新功能。”查看代码,您似乎不理解switch语句。所有这些都可以用简单的if语句完成。关于if语句,您是正确的。修改代码以使用if语句代替switch语句可能很有用。而且我对编程非常陌生,还在学习。我教会了自己一切,我会犯错误,这都是学习的一部分。然而,我们将在下周的课堂上复习转换语句。谢谢你的意见,谢谢你。我会试试你的建议。我甚至没有意识到它在检查所有这些情况。另外,由于我是SO新手,我如何接受答案?我已将switch语句转换为if语句,并且得到了相同的结果。请确保您的else语句与我在示例中放置的语句完全一致。如果您知道如何在VisualStudio中使用调试器,请在这两个else语句中放置一个断点,然后查看执行的是哪一个。需要注意的一点是,我添加了一个新的代码路径,在旧MessageBox中使用了不同的错误消息,因此请确保您看到了正确的消息(“未找到文件”与“未知节点类型”)。好的,您的解决方案确实有帮助,我现在明白了创建未知节点类型消息框的原因。我现在收到消息:“未知节点类型数据”。显然,第一部分是字符串“未知节点类型”,第二部分是emailDocument.Name。因此,通过查看我没有创建的XML文件,我发现我猜测它使用作为节点类型,并且它是未知的。您可以发送XML文件的副本吗?仅供参考,XMLReader的工作方式,如果您有一个如下()的文档,XML Reader的工作方式,在while(emailDocument.read())循环的第一次运行中,它将查看a元素,下一个循环将是B,下一个将是D,然后是C然后是E。
public Array AddEmail()
{
    string[] dRemail = { "", "", "" };
    if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"))
    {
        XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml");
        while (emailDocument.Read())
        {
            var type = emailDocument.NodeType;
            switch (type)
            {
                case XmlNodeType.Element:
                    if (emailDocument.Name == "DRCreatedAddEmail")
                    {
                        dRemail[0] = emailDocument.ReadInnerXml();
                    }
                    else if (emailDocument.Name == "DRActionNeededAddEmail")
                    {
                        dRemail[1] = emailDocument.ReadInnerXml();
                    }
                    else if (emailDocument.Name == "DRPendingAddEmail")
                    {
                        dRemail[2] = emailDocument.ReadInnerXml();
                    }
                    else
                    {
                        MessageBox.Show("Unknown node type " + emailDocument.Name);
                    }
                    break;
            }
        }
    }
    else
    {
         MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager");
    }
    return dRemail;
}