Сохранение данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сохранение данных

Сообщение KPEATOP » 16.07.2008 (Ср) 8:52

Во многших программах видел, что файл с данными сохранияется в каком то своем формате и открывается только в этой программе. Подскажите как из моей программы сохранять данные в файл, который будет открываться только в моей программе? Т.е. как сделать файлы формата моей программы ? Вроде понятно вопрос задал. Если кому не понятно, извините, как смог изъяснил.
Вечность пахнет нефтью

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 16.07.2008 (Ср) 13:10

Вопрос ясен.
Не ясны намерения.

Наверняка, в файле что-то будет храниться. Вот тебе нужно определиться с этим, а потом я подскажу, как можно более или менее оптимально хранить это "что-то". Одно могу сказать сразу: 99,9% всех типизтрованных файлов имеют в своем начале сигнатуру - последовательность уникальных байт, по которым твоя программа поймет, что это именно "её" тип файла, а не какой-то левый.
А я все практикую лечение травами...

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 16.07.2008 (Ср) 14:15

Форматы файлов имеют каждый свою структуру и шифруются различными упаковщиками... Например, EXE в заголовок вставляют символы «MZ..» – где-то читал, что это инициалы одного из авторов такого формата...

Сделай тоже самое... как говорит Twister...

А можешь сделать по-другому: сохраняй данные на диск из своей программы с каким-нибудь простым механизмом зашифровки/расшифровки, без всяких заголовков в обычном текстовом режиме. Придумай свой формат расширения, например «KPEATOP» => .KTR и сделай привязку к формату через реестр...

Создай файл реестра и запусти его...
REGEDIT4
[HKEY_CLASSES_ROOT\.KTR]
@="KTR-File"
[HKEY_CLASSES_ROOT\KTR-File]
@="Описание программы"
[HKEY_CLASSES_ROOT\KTR-File\shell]
[HKEY_CLASSES_ROOT\KTR-File\shell\Open]
[HKEY_CLASSES_ROOT\KTR-File\shell\Open\command]
@="D:\\Other\\KTR.exe \"%1\""
[HKEY_CLASSES_ROOT\KTR-File\DefaultIcon]
@="D:\\Other\\KTR.exe,1"


Теперь при двойном клике в любом из файловых менеджеров по Windows будет запускаться сначала твоя программа «KTR.exe» из каталога «D:\Other\», а потом открываться в ней файл с твоим расширением «.KTR».

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 16.07.2008 (Ср) 14:20

Ну, естественно, ".KTR"-файл будет передан в твою прогу через коммандную строку. Вот там и примени расшифровку и чтение... :)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 16.07.2008 (Ср) 14:44

и шифруются различными упаковщиками
Куда-то не туда понесло. Упаковщиками _упаковываются_ исполняемые файлы (для Windows - это PE). Но автору это "не по пути"...
символы «MZ..» – где-то читал, что это инициалы одного из авторов
Марк Зиновски, если мне не изменяет память.
А я все практикую лечение травами...

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 16.07.2008 (Ср) 15:20

Марк Зиновски...


Да, точно!... Только Zbikowski... :)

Цитата:
"..."MZ" - инициалы Mark Zbikowski, одного из разработчиков MS-DOS."
http://www.codeguru.com.ua/article/a-874.html

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 7:18

Twister, в файлах будут храниться данные различного типа (массивы, даты, числа двойной точности, целые числа и наверное тестовые данные). Но можно обойтись и без текста и дат , если проще хранить только числа. Подскажешь как их хранить в своем формате ?
Вечность пахнет нефтью

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.07.2008 (Чт) 8:36

KPEATOP, формат файла ты должен создать в данной ситуации сам! Ибо только ты знаешь, какие данные нужны твоей программе. Общие принципы конечно имеются. То есть наверняка в начале у тебя будет некая сигнатура (идентификатор), указывающая, что это именно твой файл, а не какой-либо другой. Можно дополнительно указать номер версии файла, еще что-нибудь нужное для правильного чтения этого файла. Далее будут следовать собственно данные. Если у тебя должен хранится массив одинаковых данных, то в начале у тебя должен быть указан размер этого массива. Если данные могут иметь различный размер, то нужну указать этот размер и так далее.
Весь мир матрица, а мы в нем потоки байтов!

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 8:56

я ничего не понял. В обычный текстовый файл я могу сохранять данные. А создать свой файл к своей программе не понимаю как.
Вечность пахнет нефтью

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.07.2008 (Чт) 9:42

KPEATOP
ты не можешь внятно обьяснить, в каком виде будет храниться информация в "твоем" файле. есть два варианта - текстовый и бинарный. есть еще понятие "ассоциации файлов в системе" есть сигнатуры. все это тебе привели выше. что еще?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 9:48

где об этом можно почитать, чтоб корректно вопрос задать ?
Вечность пахнет нефтью

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 17.07.2008 (Чт) 9:57

Самый простой способ с переменной кастомного типа (записью), чьи поля нужно сохранить:
Код: Выделить всё
Private Type MyType
    Param1 as Long
    Param2 as Date
    Param3 as String * 50 'строки для еще большей простоты должны быть постоянной длины
End Type

Dim Data() as MyType 'сохраним сразу несколько записей
Dim Save() as Byte
Dim d as MyType

ReDim Save(Len(d) * UBound(Data))
CopyMemory Save(0), Data(0), UBound(Save)
Open "c:\Save.MyProga" For Binary As #1
Put #1, , Save
Close #1
Лучший способ понять что-то самому — объяснить это другому.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 17.07.2008 (Чт) 12:31

Antonariy
строки для еще большей простоты должны быть постоянной длины
Не думаю что выйдет что-то путнее, если хранить в структуре строку неопределенной длины. Тут дело не в простоте. ;)

KPEATOP
Antonariy тебе дал дельный совет. Но я добалю еще: желательно, чтобы каждая структура имела в начале поле, в котором будет храниться сигнатура, по которой можно будет однозначно сказать, что за запись перед нами и каков ее размер. Это необходимо, если в файл записывается набор определенных структур разной длины в произвольном порядке.
А я все практикую лечение травами...

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 17.07.2008 (Чт) 13:42

Ну вы, блин, загрузили человека...

Не заморачивайся, ищи и читай про работу с файлами. Потом включай фантазию. Экспериментируй. А уже потом тебе, может быть, пригодятся данные выше советы.
Знание английского языка - затрудняет понимание кода

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 17.07.2008 (Чт) 14:30

Человек ищущий ответа на свой вопрос должен всегда быть готов к "интеллектуальному удару", к тому, что грамотный ответ может оказаться достаточно сложным. Если он не будет заморачиваться сейчас, не будет вкуривать элементарные для понимания вещи, пусть даже изложенные немного сумбурно, то толку от него, как от программиста будет мало. В конце концов я тут не теорию относительности объясняю... :)
А я все практикую лечение травами...

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 17.07.2008 (Чт) 14:39

Человеку, даже не вкуривающему элеметарные вещи, не нужен грамотный ответ на то, чего он не спрашивает.
Ему нужен грамотный посыл к литературе.
Знание английского языка - затрудняет понимание кода

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 14:48

Ладно, хорош, закроем эту тему. Я сначала почитаю про это, а потом корректно вопросы буду задавть.
Посмотрите лучше другую мою тему "MSChart" , здесь же на этом форуме. Она мне щас важнее.
Вечность пахнет нефтью

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 17.07.2008 (Чт) 14:51

не нужен грамотный ответ на то, чего он не спрашивает.
Ткни носом в то место, где я ответил не по теме или ответил на то, что он не спрашивал.
А я все практикую лечение травами...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.07.2008 (Чт) 16:32

Antonariy писал(а):Самый простой способ с переменной кастомного типа (записью), чьи поля нужно сохранить:
Код: Выделить всё
Private Type MyType
    Param1 as Long
    Param2 as Date
    Param3 as String * 50 'строки для еще большей простоты должны быть постоянной длины
....


Все верно, но нафиг строки постоянной длины-то? Кому от этого будет проще?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 18.07.2008 (Пт) 7:09

но нафиг строки постоянной длины-то?
А что запишется в файл (я имею ввиду кол-во байт), если не указать длину? И как мы потом узнаем, сколько байт считывать из файла?
А я все практикую лечение травами...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.07.2008 (Пт) 18:02

Twister писал(а):
но нафиг строки постоянной длины-то?
А что запишется в файл (я имею ввиду кол-во байт), если не указать длину? И как мы потом узнаем, сколько байт считывать из файла?


Хм. Элементарно. Пишешь и считываешь переменную одного и того же типа. VB в этом сам спокойно разберется.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.07.2008 (Пт) 21:08

Если писать запись за записью каждый элемент массива, то да.
Лучший способ понять что-то самому — объяснить это другому.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.07.2008 (Пт) 22:01

Antonariy писал(а):Если писать запись за записью каждый элемент массива, то да.


НЕТ.

Можно спокойно писать самую сложную переменную пользовательского типа, содержащую в том числе массивы других сложных переменных пользовательского типа. Все прекрасно сохраняется и восстанавливается одной строкой. Попробуй - оно давно проверено...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 82

    TopList