views:

465

answers:

1

Hi:

I am using mysettings to save user settings.

This config file is saved in this path:

c:\ Documents and Settings \ \ [Local Settings] Application Data\\\

Is possible to change this path? For example, in my case I save app data in "ProgramData" folder (Vista & W7) and I would like save this config file in the same folder. Is possible?

Thanks in advance

A: 

From my experience, If you say you will transfer the setting from Win XP to Vista or W7, It is not possible to fix the folder path.

However in one PC, You can Fix the folder path to ApplicationData\ApplicationName\anUgLycOde\ by sign your .exe by using sn tools. (the uglu code would change each time you rebuild and sign will prevent this).

But if you think to make a cross Win version, I suggest you not to use My Settings but to use Xml serialization. Create a class to define your setting, Load and Save it by using Xml Serialize and Deserialize. You can put in My Document or same folder with *.exe.

Here is the sample:

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

To use it simply as:

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
CallMeLaNN