Найти тему

Сохранение параметров программы в файл в VB.NET

Часто программисту необходимо сохранять какие-либо параметры в файл. Способ в «лоб» – создать процедуру, поочередно сохраняющую параметры. Сохранять их можно в текстовый файл, например ini, в xml формате и, наименее удобно – в бинарном. Однако, VB.NET позволяет записать в файл целую структуру и так же ее прочитать, автоматически определив все ее поля буквально одним движением. Для примера сохраним в файл размеры и координаты формы при ее закрытии, а затем прочитаем их и присвоим при открытии.

Определим саму структуру сохраняемых данных и переменные, необходимые для работы.

Внимание! Для успешной работы алгоритма поля структуры должны быть простыми, например Integer или String и т.п. То есть, на пример, необходимо отдельно сохранять длину и ширину формы в Integer полях, а не ее свойство Size. Переменную Parameters не обязательно объявлять глобально для класса, достаточно внутри процедуры.

Private Structure SaveParameters
Public Width As Integer
Public Height As Integer
Public X As Integer
Public Y As Integer
End Structure

Private Parameters As SaveParameters
Private Const FName As String = "params.bin"

Сохраним параметры в файл FName, например, при закрытии формы (для этого необходимо добавить вызов процедуры в обработчик события FormClosing.

Public Sub Save()
With Parameters
.Width = Me.Size.Width
.Height = Me.Size.Height
.X = Me.Location.X
.Y = Me.Location.Y
End With

If FileIO.FileSystem.FileExists(FName) Then
FileIO.FileSystem.DeleteFile(FName)
End If

Dim FN As Integer = FileSystem.FreeFile()
FileSystem.FileOpen(FN, FName, OpenMode.Binary)
FileSystem.FilePut(FN, Parameters)
FileSystem.FileClose(FN)
FN = Nothing
End Sub

Ниже показана процедура загрузки параметров из файла в структуру и присвоение значений форме. Вызвать процедуру можно из обработчика события Load.

Public Sub Load()
If FileIO.FileSystem.FileExists(FName) Then
Dim FN As Integer = FileSystem.FreeFile()
FileSystem.FileOpen(1, FName, OpenMode.Binary)
FileSystem.FileGet(FN, Parameters)
FileSystem.FileClose(FN)

With Parameters
Me.Size = New Point(.Width, .Height)
Me.Location = New Point(.X, .Y)
End With
End If
End Sub

В данном примере не хватает обработчиков ошибок, но они опущены для простоты. Минусом такого подхода, по сравнению с хранением в текстовых файлах является неудобство редактирования самого файла. Конечно, если эта необходимость возникает. Кроме того, необходимо помнить, что изменение структуры вызовет ошибку при загрузке из уже сохраненного файла.

#vb.net

Наука
7 млн интересуются