VB.net - Перезапись файла произвольного доступа

Эта часть моей программы предназначена для добавления сведений о пользователе в файл произвольного доступа. Подпрограмма ниже предназначена для этого:

    'This allows a user to be added to the User File
    Dim UserToAdd As User
    Dim UserFile As Integer
    Dim RecordNumber As Long

    'Read the data off the form and populate corresponding
    'UserToAdd values
    With UserToAdd
        .UserID = Val(txt_UserID.Text)
        .UserBarcode = txt_UserBarcode.Text
        .Forename = txt_Forename.Text
        .Surname = txt_Surname.Text
        .AccessRights = cmb_AccessRights.Text
    End With

    'Find the next open space in the User File
    UserFile = FreeFile()

    'Now open the file used to store User records
    FileOpen(UserFile, UserFileName, OpenMode.Random, OpenAccess.Write, OpenShare.Shared, Len(UserToAdd))
    RecordNumber = Len(UserFile) + 1

    'Add the new user to the file
    FilePut(UserFile, UserToAdd, RecordNumber)
    FileClose(UserFile)

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


person stizzo96    schedule 04.02.2014    source источник


Ответы (1)


Похоже, что происходит несколько вещей, во-первых, поскольку вы пишете файл RandomAccess, записи должны быть одинаковой длины, поэтому ваша структура должна быть настроена примерно так (Поскольку вы не опубликовали свою структуру /class Я предполагаю, что это может быть проблемой, если не вторая проблема, вероятно, является причиной вашей проблемы).

Public Structure User
    Public UserId As Integer
    <VBFixedString(50)> Public UserBarCode As String
    <VBFixedString(20)> Public Forename As String
    <VBFixedString(20)> Public Surname As String
    <VBFixedString(20)> Public AccessRights As String
End Structure

Во-вторых, ваш RecordNumber недействителен, вы просто получаете длину целого числа (ваша переменная UserFile). Задав вашей структуре фиксированный размер, вы можете использовать LOF Метод получения длины вашего открытого файла, а затем деления ее на размер вашей записи, чтобы определить количество записей примерно так.

RecordNumber = (LOF(UserFile) \ Len(UserToAdd)) + 1

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

person Mark Hall    schedule 04.02.2014