【问题标题】:Write and read data from XML file through VB.Net at launch在启动时通过 VB.Net 从 XML 文件写入和读取数据
【发布时间】:2020-03-18 23:36:27
【问题描述】:

在过去的一年半里,我开始在 VB.Net 中做一些应用程序,尽管我进行了所有的研究以寻求答案,但对我来说没有什么工作得足够好,所以我在这里,问我的问题。

我有一个应用程序允许用户将以下数据保存在 XML 文件中:

  1. 上面保存数据的自定义名称(在名为txtName的文本框中输入)
  2. 电子邮件(在名为txtEmail 的文本框中输入)
  3. 密码(在名为txtPassword的文本框中输入)

XML 文件(名称:appData.xml - 请参阅下面的可执行文件目录以及 xml 文件目录)如下所示的模板。 xml 文件总共存储了 10 个密码,每个密码都有一个 ID 号。我认为我需要指定一个 ID 号(从 0110)才能在我的应用程序代码中引用它。如果有更简单的方法来确定保存数据的存储位置,请随时修改我的 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<savedData>
    <savedPassword id="01">
        <name>Stored Name</name>
        <email>storedname@email.com<email>
        <password>storedPassword</password>
    </savedPassword>
    <savedPassword id="02">
        <name>Stored Name</name>
        <email>storedemail@email.com<email>
        <password>storedPassword</password>
    </savedPassword>
    <-- Other data modules for ids 03 to 09 --!>
    <savedPassword id="10">
        <name />
        <email />
        <password />
    </savedPassword>
</savedData>

XML 位于以下文件夹中:C:\VelocityDK Codes\Password Manager,应用程序的可执行文件位于以下文件夹中:[USERPROFILE]\Documents\VelocityDK Codes(“[USERPROFILE]”是我硬盘上的文档文件夹的部分路径)。 由于我对 VB.Net(Windows 表单)中的 XML 处理非常陌生,我不知道是否需要表单的名称来从 xml 中检索数据 - 但如果是,这里是:frmMain

遗憾的是,我没有足够的经验来存储来自外部数据文件的数据,也没有足够的经验从与加载可执行文件的应用程序文件位于完全不同的目录中的文件中提取数据,所以我实际上没有任何经验要提供的代码...因此,我要做的是:我需要在每次启动时自动从我的 XML 文件中检索数据。

【问题讨论】:

  • 是您不知道加载XML文件的问题吗?还是如何添加在程序开始时运行的代码?还是您不知道如何访问文件系统中与当前目录不同的文件夹中的文件?请澄清。
  • 你展示了一些来自微软所说的应该用于程序和数据的位置的变体。看看Environment.SpecialFolder Enum 看看应该存储的东西。 ApplicationData 或 CommonApplicationData 中您自己的目录(即您选择一个合理的名称)将是存储 XML 文件的理想位置。
  • @DocBrown 我需要知道如何从不同目录/文件夹的 XML 文件中读取数据。
  • @AndrewMorton 好的,我稍后会处理它。感谢您的建议。
  • @AndrewMorton 谢谢!效果很好!

标签: xml vb.net winforms


【解决方案1】:

使用 XML 序列化。在大多数情况下,IMO 这优于使用 XDocuments。您将拥有一个带有子项的对象,它们代表您的 xml 文件内容。你可以迭代孩子,一切都是强类型的。

首先创建 VB.NET 类来表示您的数据

Option Strict On

Imports System.IO
Imports System.Xml.Serialization
<XmlRoot("savedData")>
Public Class SavedData
    <XmlElement("savedPassword")>
    Public Property SavedPasswords As List(Of SavedPassword)
End Class

Public Class SavedPassword
    <XmlAttribute("id")>
    Public Property ID As Byte
    <XmlElement("name")>
    Public Property Name As String
    <XmlElement("email")>
    Public Property Email As String
    <XmlElement("password")>
    Public Property Password As String
End Class

一旦你有了它,将文件读入你的类就很简单了。使用以下代码

Dim filename = "filename.xml"
Dim data As SavedData
Dim serializer As New XmlSerializer(GetType(SavedData))
Using sr = New StreamReader(filename)
    data = CType(serializer.Deserialize(sr), SavedData)
End Using
For Each sp In data.SavedPasswords
    Console.WriteLine($"id: '{sp.ID}', name: '{sp.Name}', email: '{sp.Email}', password: '{sp.Password}'")
Next

您唯一需要做的就是设置正确的文件名而不是Dim filename = "filename.xml"。如果路径是固定的,您可以简单地对其进行硬编码

Dim filename = "C:\VelocityDK Codes\Password Manager\filename.xml"

如果路径可以变化,例如基于 Environment.SpecialFolder Enum,您可以将其合并到作业中:

执行程序集不必与 xml 文件位于同一文件夹中。

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2012-03-04
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多