VB.net - 覆盖随机访问文件

时间:2014-02-04 19:03:37

标签: vb.net random-access randomaccessfile

我程序的这一部分旨在将用户详细信息添加到随机访问文件中。下面的子例程旨在执行此操作:

    '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)

实际保存详细信息没有问题,但是每次添加另一条记录时都会覆盖该文件。我怎么能阻止这个以及我上面做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来有一些事情正在发生,第一个是因为你正在编写一个RandomAccess文件,记录需要具有相同的长度,因此你的结构需要设置这样的东西(因为你没有发布你的结构/类我猜这可能是一个问题,如果不是第二个问题可能是导致你的问题的原因

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无效,你只是获得整数的长度(你的用户文件变量)。通过为您的结构提供固定大小,您可以使用LOF方法获取打开文件的长度,然后将其除以记录大小,以确定类似的记录数量。

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

正如我在评论中所述,这些功能是从VB6中遗留下来的,但我可以看到为什么你会想要使用它们,似乎缺乏任何其他方式的信息。