更改保存mysettings的路径 - VB.NET 2008

时间:2010-04-15 09:48:14

标签: vb.net path programdata

我正在使用mysettings来保存用户设置。

此配置文件保存在此路径中:

  

c:\ Documents and   设置\ \ [本地   设置]应用程序   数据\\ \

可以改变这条路吗?例如,在我的情况下,我将应用程序数据保存在“ProgramData”文件夹(Vista& W7)中,我想将此配置文件保存在同一文件夹中。有可能吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

根据我的经验,如果您说您将设置从Win XP转移到Vista或W7,则无法修复文件夹路径。

但是在一台PC中,您可以通过使用sn工具对.exe进行签名来修复ApplicationData \ ApplicationName \ anUgLycOde \的文件夹路径。 (每次重建时uglu代码都会改变,而签名会阻止这种情况发生。)

但是如果您想制作一个跨Win版本,我建议您不要使用我的设置,而是使用Xml序列化。创建一个类来定义您的设置,使用Xml Serialize和Deserialize加载并保存它。您可以使用* .exe。

放入“我的文档”或相同的文件夹

以下是样本:

Imports System.Xml.Serialization

<XmlRoot("FTPSender")> _
Public Class FTPSenderConfig

    ' default file path relative to the current .exe file path.
    Const fDefaultCFGFile As String = "FTPSender.cfg"
    Public Shared ReadOnly Property DefaultFilePath() As String
        Get
            Return IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) & "\" & fDefaultCFGFile
        End Get
    End Property

    Public Shared Function Load(Optional ByVal FilePath As String = Nothing) As FTPSenderConfig
        If FilePath Is Nothing Then FilePath = DefaultFilePath()
        If Not IO.File.Exists(FilePath) Then Return New FTPSenderConfig() ' load default settings
        Using sr As New IO.StreamReader(FilePath)
            Try
                Dim x As New XmlSerializer(GetType(FTPSenderConfig))
                Load = CType(x.Deserialize(sr), FTPSenderConfig)
                'MyLog.WriteLog("FTPSender settings loaded.")
            Finally
                If sr IsNot Nothing Then
                    sr.Close()
                    sr.Dispose()
                End If
            End Try
        End Using
    End Function

    Public Shared Sub Save(ByVal FTPSenderConfig As FTPSenderConfig, Optional ByVal FilePath As String = Nothing)
        If FilePath Is Nothing Then FilePath = DefaultFilePath()
        If FTPSenderConfig Is Nothing Then Return
        Using sw As New IO.StreamWriter(FilePath)
            Try
                Dim x As New XmlSerializer(FTPSenderConfig.GetType())
                x.Serialize(sw, FTPSenderConfig)
                'MyLog.WriteLog("FTPSender settings saved.")
            Finally
                If sw IsNot Nothing Then
                    sw.Close()
                    sw.Dispose()
                End If
            End Try
        End Using
    End Sub

        Dim fHost As String = "127.0.0.1"
        <XmlElement("Host")> _
        Public Property Host() As String
            Get
                Return fHost
            End Get
            Set(ByVal value As String)
                fHost = value
            End Set
        End Property

        Dim fUser As String = "guess"
        <XmlElement("User")> _
        Public Property User() As String
            Get
                Return fUser
            End Get
            Set(ByVal value As String)
                fUser = value
            End Set
        End Property

        Dim fPassEncrypted As String = EncDec.Encrypt("guess")
        <XmlElement("PassEncrypted")> _
        Public Property PassEncrypted() As String
            Get
                Return fPassEncrypted
            End Get
            Set(ByVal value As String)
                fPassEncrypted = value
            End Set
        End Property

        <XmlIgnore()> _
        Public Property Pass() As String
            Get
                Return EncDec.Decrypt(fPassEncrypted)
            End Get
            Set(ByVal value As String)
                fPassEncrypted = EncDec.Encrypt(value)
            End Set
        End Property

        Dim fTransferMode As String = MyFTPClient.TransferModeEnum.Passive.ToString()
        <XmlElement("TransferMode")> _
        Public Property TransferMode() As MyFTPClient.TransferModeEnum
            Get
                Return [Enum].Parse(GetType(MyFTPClient.TransferModeEnum), fTransferMode)
            End Get
            Set(ByVal value As MyFTPClient.TransferModeEnum)
                fTransferMode = value.ToString()
            End Set
        End Property

End Class

简单地用作:

Dim cfg As FTPSenderConfig

cfg = FTPSenderConfig.Load() ' In Form_Load

Dim h as String = cfg.Host
cfg.Host = h

FTPSenderConfig.Save(cfg) ' In Form_FormClosed