Изменить путь для сохранения настроек - VB.NET 2008 - PullRequest
4 голосов
/ 15 апреля 2010

Я использую mysettings для сохранения пользовательских настроек.

Этот файл конфигурации сохраняется по этому пути:

c: \ Documents and Настройки \ \ [Локальные Настройки] Приложение Данные \\ \

Можно ли изменить этот путь? Например, в моем случае я сохраняю данные приложения в папке «ProgramData» (Vista & W7) и хочу сохранить этот файл конфигурации в той же папке. Возможно?

Заранее спасибо

1 Ответ

0 голосов
/ 15 апреля 2010

По моему опыту, если вы скажете, что перенесете настройки из Win XP в Vista или W7, невозможно исправить путь к папке.

Однако на одном ПК вы можете исправить путь к папке ApplicationData \ ApplicationName \ anUgLycOde \, подписав свой .exe с помощью инструментов sn. (код uglu будет меняться каждый раз, когда вы перестраиваете, и подпись предотвратит это).

Но если вы думаете сделать кросс-версию Win, я предлагаю вам не использовать Мои настройки, а использовать сериализацию Xml. Создайте класс для определения ваших настроек, загрузите и сохраните его с помощью Xml Serialize и Deserialize. Вы можете поместить в My Document или ту же папку с * .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
...