配置任何用户,特定于工作站的配置的文件位置

时间:2013-02-07 13:15:51

标签: c# vb.net

存储计算机专用配置文件的正确位置在哪里。文件不时变化,任何用户都需要访问它(每台机器一个配置)。我不想修改app.config,因为它会因为许可原因而被新版本覆盖。 该文件将在首次启动时创建,并保留在任何新版本中。 此致

1 个答案:

答案 0 :(得分:1)

.NET框架已经使用了一个机器配置文件,该文件包含在该机器上运行的所有.NET应用程序共享的设置,但听起来并不像您正在寻找的那样。

如果您不需要应用程序能够对配置文件进行修改,那么我会说最简单的方法就是将设置存储在可执行文件夹中的XML文件中。您可以从当前目录轻松加载应用程序中的设置。您可以根据需要为文件命名。

但是,如果您需要从应用程序中对配置文件进行修改,那么我不建议这样做,因为并非每个用户都具有写入应用程序文件夹中的文件所需的权限。因此,如果是这种情况,我建议将配置文件存储在独立存储中。

当您更改应用程序的版本号时,隔离存储可能会变得有点棘手,以确保您的存储不会“丢失”。当您想要存储可从机器上运行的任何应用程序访问的设置时,它会变得更加棘手。在过去,我需要创建一个独立的存储,这个存储将由一套软件中的多个应用程序共享,因此我编写了以下类,该类适用于此目的:

Public Class LocalStorage
    Implements ILocalStorage

    Private Const _CompanyUrl As String = "http://www.mycompany.com"

    Public Function Read(Of T)(ByVal fileName As String) As T
        Dim contents As T = Nothing
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
        Try
            Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, GetStorage())
                Using xmlReader As XmlReader = New XmlTextReader(stream)
                    contents = CType(serializer.Deserialize(xmlReader), T)
                End Using
            End Using
        Catch ex As FileNotFoundException
        Catch ex As Exception
            Throw New IOException("Failed to read from " + fileName + " in local isolated storage", ex)
        End Try
        Return contents
    End Function

    Public Sub Write(Of T)(ByVal fileName As String, ByVal serializableDataObject As T)
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
        Try
            Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Create, FileAccess.Write, GetStorage())
                Using xmlTextWriter As XmlTextWriter = New XmlTextWriter(stream, New UTF8Encoding(False))
                    xmlTextWriter.Formatting = Formatting.Indented
                    Dim namespaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
                    namespaces.Add("", "")
                    serializer.Serialize(xmlTextWriter, serializableDataObject, namespaces)
                End Using
            End Using
        Catch ex As Exception
            Throw New IOException("Failed to write to " & fileName & " in local isolated storage", ex)
        End Try
    End Sub

    Private Function GetStorage() As IsolatedStorageFile
        Return IsolatedStorageFile.GetStore(IsolatedStorageScope.Machine Or IsolatedStorageScope.Assembly, Nothing, New Url(_CompanyUrl))
    End Function
End Class