Страница: 1 |
Страница: 1 |
Вопрос: Запись и загрузка в двоичный файл
Добавлено: 12.07.06 16:10
Автор вопроса: FIX | ICQ: 348680795
'делал как в теории, но он, видимо, даже сохраняет не правильно. Помогите пожалст. Нужно чтоб он сохранил сначала кол-во записей NumRecords, а потом массив сруктур Records.
Put [#]fileNumber, [recNumber], varName
где:
fileNumber — номер файла;
recNumber — размер записи в байтах;
varName — переменная, в которой хранятся данные, записываемые в файл.
Private Sub CmdSave_Click()
Dim FileNum As Integer
FileNum = FreeFile
Open App.Path & "\Note.txt" For Binary As FileNum
Put #FileNum, 2, NumRecords
For i = 0 To NumRecords
Put #FileNum, 20, Records(i).Naim
Put #FileNum, 4, Records(i).Cost
Put #FileNum, 3, Records(i).Massa
Put #FileNum, 14, Records(i).Razmeri
Put #FileNum, 3, Records(i).Proc
Put #FileNum, 2, Records(i).OZY
Put #FileNum, 4, Records(i).Diagonal
Put #FileNum, 1, Records(i).Video
Put #FileNum, 4, Records(i).Resolution.x
Put #FileNum, 4, Records(i).Resolution.y
Put #FileNum, 2, Records(i).Regeneration
Put #FileNum, 5, Records(i).HDD
Next
Close #FileNum
End Sub
Private Sub CmdLoad_Click()
Dim FileNum As Integer
FileNum = FreeFile
Open App.Path & "Note.txt" For Binary As FileNum
Get #FileNum, 2, NumRecords
ReDim Records(NumRecords)
For i = 0 To NumRecords
Get #FileNum, 20, Records(i).Naim
Get #FileNum, 4, Records(i).Cost
Get #FileNum, 3, Records(i).Massa
Get #FileNum, 14, Records(i).Razmeri
Get #FileNum, 3, Records(i).Proc
Get #FileNum, 2, Records(i).OZY
Get #FileNum, 4, Records(i).Diagonal
Get #FileNum, 1, Records(i).Video
Get #FileNum, 4, Records(i).Resolution.x
Get #FileNum, 4, Records(i).Resolution.y
Get #FileNum, 2, Records(i).Regeneration
Get #FileNum, 5, Records(i).HDD
Next
Close #FileNum
Call prcShowAll
End Sub
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #1
Добавлено: 12.07.06 16:24
Видимо у тебя теория неправильная: второй параметр - это не размер записи, размер записи задается длиной строки VarName, а вот второй параметр - это номер байта в файле, начиная с которого пойдет запись этой строки. И еще имей в виду, что для некоторых типов данных номер байта с которого записываешь может не совпасть с номером байта который потом нужно считать - там вначале может подставляться некоторая абракадабра. Проще всего определить это записав некий файл, а затем открыв его в блокноте.
Номер ответа: 2
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #2
Добавлено: 12.07.06 16:26
Файл получается всё время 39 байт а должен быть 68 байт
Номер ответа: 3
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #3
Добавлено: 12.07.06 16:30
спасиб, пора справочник выкидывать(не первый раз ошиПки нахожу
Номер ответа: 4
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #4
Добавлено: 12.07.06 16:30
Ну так а я о чем? при записи
Put #FileNum, 20, Records(i).Naim
Ты записываешь в файл по номером FileNum запись длиной Len(Records(i).Naim) начиная с 20-го байта в файле. Вот и получается 39 байт.
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 12.07.06 20:24
помойму должно быть просто что-то вроде...
Dim FileNum As Integer
FileNum = FreeFile
Open App.Path & "\Note.txt" For Binary As FileNum
Put #FileNum, , Records
Close #FileNum
End Sub
она на то ж и структура...
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 15.07.06 05:36
p.s. стринги в структуре фиксированной длинны должны быть
Dim bla as String * 10
10 - длинна строки