将设置存储在可执行应用程序的相对路径中

我正在开发一个可以通过USB运行的应用程序,它像扩展坞/启动器应用程序一样,但是有问题。

我想使用my.settings类保存我的应用程序设置,但是它将设置文件保存在AppData文件夹中,例如C:\Users\<user_name>\AppData\Local\...\...\user.config

我不要那个。我想保存我定义的路径和名称,例如My.Application.Info.DirectoryPath"\Settings.xml"

我该如何实现?

最终XML的更新示例:

<?xml version="1.0" encoding="utf-8"?>
<conf>
    <pos>1</pos>
    <btn index="1" value="D:\League of Legends\" perm="true">Leagueclient.exe</btn>
    <btn index="2" value="D:\RuneLite\" perm="false">RuneLite.exe</btn>
    <btn index="3" value="" perm="false"></btn>
    <btn index="4" value="" perm="false"></btn>
</conf>

Github中的完整项目即将推出!

xiashiwei1 回答:将设置存储在可执行应用程序的相对路径中

为我工作的方式:

Imports System.IO
Imports System.Xml

Public Class Form1
    Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
        ValConfFile()
    End Sub
    Public Sub ValConfFile()
        If File.Exists("config.xml") = False Then : CreateConfXML() : End If
    End Sub
    Public Sub CreateConfXML()
        Dim obj As Object
        Dim archivo As Object
        Dim x As Integer = 1
        obj = CreateObject("Scripting.FileSystemObject")
        archivo = obj.CreateTextFile("config.xml",True)
        archivo.WriteLine("<?xml version='1.0' encoding='utf-8'?>")
        archivo.WriteLine("<conf>")
        archivo.WriteLine("<pos>1</pos>")
        For x = 1 To 4
            archivo.WriteLine("<btn index='" & CStr(x) & "' value='' perm='false'></btn>")
        Next
        archivo.WriteLine("</conf>")
        archivo.Close()
    End Sub
End Class
,

XML序列化可用于此目的,实际上非常简单。您需要做的就是为您的数据设计一个或多个类,然后应用appropriate attributes(它们的名称以Xml...Attribute的形式)以便按照您想要的方式序列化它们。

在此设置中,我使用了四个不同的属性:

  • XmlElement-通常是最常见的一个。指定将属性序列化为其自身的元素。可以通过在构造函数中设置ElementName参数来自定义结果名称。

    如果用于列表或数组,则适用于集合中的每个项目。

  • XmlRoot-与XmlElement几乎相同,但用于根元素(类本身)。

  • XmlAttribute-指定将属性序列化为应用于父对象的属性(name="value"),而不是作为其内部元素的序列。

  • XmlText-指定将属性的值序列化为父对象(即<object>property value</object>)的标签之间的内容。

Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization

<XmlRoot(ElementName:="conf")>
Public Class Config

    <XmlElement(ElementName:="pos")>
    Public Property Position As Integer

    <XmlElement(ElementName:="btn")>
    Public Property Buttons As New List(Of ConfigButton)

    Public Sub New()
    End Sub

    Public Sub New(ByVal Position As Integer)
        Me.Position = Position
    End Sub

    Public Shared Function Load(ByVal File As String) As Config
        Using FStream As New FileStream(File,FileMode.Open,FileAccess.Read,FileShare.Read)
            Dim Serializer As New XmlSerializer(GetType(Config))
            Return Serializer.Deserialize(FStream)
        End Using
    End Function

    Public Sub Save(ByVal File As String)
        Using FStream As New FileStream(File,FileMode.Create,FileAccess.Write,FileShare.None)
            Dim Serializer As New XmlSerializer(GetType(Config))
            Serializer.Serialize(FStream)
        End Using
    End Sub
End Class
Public Class ConfigButton

    <XmlText()>
    Public Property DisplayName As String

    <XmlAttribute("index")>
    Public Property Index As Integer

    <XmlAttribute("perm")>
    Public Property Perm As Boolean

    <XmlAttribute("value")>
    Public Property Value As String

    Public Sub New()
    End Sub

    Public Sub New(ByVal DisplayName As String,ByVal Value As String,ByVal Index As Integer,ByVal Perm As Boolean)
        Me.DisplayName = DisplayName
        Me.Value = Value
        Me.Index = Index
        Me.Perm = Perm
    End Sub
End Class

用法示例:

Private cfg As Config

'
'Loading the config.
'

Private Sub Form1_Load(sender As Object,e As EventArgs) Handled MyBase.Load
    If File.Exists("config.xml") Then
        cfg = Config.Load("config.xml")
    Else
        cfg = New Config()
    End If
End Sub

'
'Saving the config.
'

Private Sub Form1_FormClosed(sender As Object,e As EventArgs) Handles Me.FormClosed
    cfg.Save("config.xml")
End Sub

添加按钮:

cfg.Buttons.Add(New ConfigButton("RuneLite.exe","D:\RuneLite\",2,False))

迭代按钮:

For Each btn As ConfigButton In cfg.Buttons
    MessageBox.Show(btn.DisplayName)
Next

删除特定索引处的按钮:

'Removes the fourth button.
cfg.Buttons.RemoveAt(3)
本文链接:https://www.f2er.com/3020412.html

大家都在问