Файл произвольного доступа: пустая запись в конце? - VB

Узнай цену своей работы

Формулировка задачи:

Пытаюсь освоить чтение и запись в файл произвольного доступа (random). Получается, что после чтения последней записи считывается еще пустая запись?! Сделал тестовую процедурку, там то же самое: F7 создает файл с одной записью, размер файла соответствует ей (36 байт), но при чтении F8 возвращается еще пустая запись и seek= 3 после ее чтения. Кто подскажет в чем прикол?
Листинг программы
  1. Private Type GameRslts
  2. sName As String * 30
  3. nOpnClicks As Integer
  4. ScndsCl As Single
  5. End Type
  6. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  7. Dim Rcrd As GameRslts, FlNm As String, i As Integer 'debug
  8. FlNm = aPath & "myFileName" 'debug. aPath is global-module function of app.path+-"\"
  9. Select Case KeyCode
  10. Case Is = vbKeyF1
  11. 'show help here
  12. Case Is = vbKeyF7 'debug write
  13. With Rcrd
  14. .sName = "Test": .nOpnClicks = "99": .ScndsCl = "19648"
  15. End With
  16. Open FlNm For Random As #1 Len = Len(Rcrd)
  17. Put #1, , Rcrd
  18. Close 1
  19. Case Is = vbKeyF8 ' debug read
  20. Open FlNm For Random As #1 Len = Len(Rcrd)
  21. Do While Not EOF(1)
  22. Get #1, , Rcrd
  23. With Rcrd
  24. MsgBox .sName & " " & CStr(.nOpnClicks) & " " & CStr(.ScndsCl), , CStr(Seek(1))
  25. End With
  26. If EOF(1) Then Exit Sub ' даже так пробовал :)
  27. Loop 'Until EOF(1)
  28. End Select
  29. End Sub
. Не потому ли в примерах предлагают использовать для чтения цикл по количеству записей, рассчитанному по размеру файла:
Листинг программы
  1. For i = 1 To Int(LOF(1) / Len(GmRes))
  2. 'While Not EOF(1) 'и так пробовал
  3. Get #1, i, GmRecords 'Dim GmRes As GameRslts, GmRecords As GameRslts прописаны
  4. '......обработка считанного.....
  5. Next i : Close 1
Пробовал. Однако в программе после добавления в файл в т о р о й записи, его размер становится 108 байт, а не 72, т.е. снова добавляется пустая строка??

Решение задачи: «Файл произвольного доступа: пустая запись в конце?»

textual
Листинг программы
  1. For i = 1 To Int(LOF(1) / Len(GmRes))
  2.                    Get #1, i, GmRecords
  3.         '......
  4. Next i

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы