Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
помойму должно быть просто что-то вроде...

Private Sub CmdSave_Click()
        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 - длинна строки

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам