マシン固有の設定ファイルを保存する正しい場所はどこですか。ファイルは時々変更され、すべてのユーザーがアクセスできる必要があります(つまり、マシンごとに1つの構成)。app.configは新しいリリースで上書きされ、許可の理由で上書きされるため、変更したくありません。ファイルは最初の起動時に作成され、新しいバージョンのためにそこに残ります。よろしく
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