Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 21:42   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Счастье Создание DAT файла....

Привет всем!
Интересует насущьная проблема создания DAT файла.. со структурой..

хотелось бы узнать у вас как их создовать.
FileStream или MemoryStream?
Read или ReadBuffer?

желательно рабочим примером..

я в тупике=)

вот что есть у меня:
Код:
type
  TDatSettings = record
  URLLogo:string;          //данные ссылки лого
  URLRepository:string;    //данные ссылки репозитория
  URLFilesList:string;     //данные ссылки файл-листа
  HashType:Integer;        //данные о типе хеша
  AdmPassKeys:string;      //данные о доступе в админку
  URLUpdateSelf:string;    //данные ссылки на самоапдейт
  end;

procedure SaveToDAT(DatFile:string);
procedure LoadFromDAT(DatFile:String);

var
  my:string;


implementation

uses MainUnit;

//////Читаем структуру ДАТ файлов...
procedure SaveToDAT(DatFile:string);
var
  Data:TDatSettings;
  FS:TFileStream;
begin
  my:=ExtractFilePath(ParamStr(0));
  //записываем в структуру...
Fs:=TFileStream.Create(my+DatFile,fmCreate); //создаём файл DAT
Data.URLLogo:=MainForm.LogoEdit.Text;
Data.URLRepository:=MainForm.FilesRepositoryEdit.Text;
Data.URLFilesList:=MainForm.FilesListEdit.Text;
Data.HashType:=MainForm.HashTypeGr.ItemIndex;
Data.AdmPassKeys:=MainForm.SecretPassEdit.Text;
Data.URLUpdateSelf:=MainForm.SelfUpdatesEdit.Text;
FS.WriteBuffer(data,SizeOf(Data));    //пишем структуру в файл
FS.Free;
end;

procedure LoadFromDAT(DatFile:String);
var
  Data:TDatSettings;
  FS:TFileStream;
begin
  my:=ExtractFilePath(ParamStr(0));
  if FileExists(my+DatFile) then
  begin
  FS:=TFileStream.Create(my+DatFile,fmOpenRead);
  FS.ReadBuffer(Data,SizeOf(Data));
  //читаем структуру...
MainForm.LogoEdit.Text:=Data.URLLogo;
MainForm.FilesRepositoryEdit.Text:=Data.URLRepository;
MainForm.FilesListEdit.Text:=Data.URLFilesList;
MainForm.HashTypeGr.ItemIndex:=Data.HashType;
MainForm.SecretPassEdit.Text:=Data.AdmPassKeys;
MainForm.SelfUpdatesEdit.Text:=Data.URLUpdateSelf;
FS.Free; //удаляемся
  end else
  MessageBox(0,'Файл настроек отсутствует! Будут загружены стандартные настройки','Ошибка!',MB_OK or MB_ICONERROR);
  //Сообщаем пользоватлю что файл не найден!
end;
хетелось бы узнать правельно ли я записываю данные в структуру?

просто где бы я в проекте не пихнул процедуру чтения в OnCreate, при старте программы везде AV(Acces Violation)...

убрал с проекта форму, сделал панель на гл. форме, и всеравно AV.

Может DAT не так создан?

Последний раз редактировалось Человек_Борща; 25.05.2010 в 21:44.
Человек_Борща вне форума Ответить с цитированием
Старый 25.05.2010, 21:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

извините, но вы знаете что такое string?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2010, 22:00   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

размер данных в пакете не определен для составляющих, кроме одного integer... сделайте так (старый dat файл удалите) :
Код:
type
  TDatSettings = record
  URLLogo:string[10];          //или  array [0..255] of Char
  URLRepository:string[10];
  URLFilesList:string[10]; 
  HashType:Integer;    
  AdmPassKeys:string[10];   
  URLUpdateSelf:string[10];  
  end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.05.2010, 22:09   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

String - строка..

raxp!
спасибо! Всё стало на свои места! буду теперь знать что надо ограничивать данные..
Человек_Борща вне форума Ответить с цитированием
Старый 25.05.2010, 22:17   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
String - строка..
я не про это. а про то что оно из себя представляет.
а представляет оно указатель на строку. который вы и записывали в dat.

если хотите записать строку(любого размера) в поток, то нужно делать так:
Код:
procedure StringToStream(Stream:TStream;Str:string); 
var i:integer; 
begin
 i:=Length(Str);
 Stream.Write(i,SizeOf(i));
 Stream.Write(Str[1],i*SizeOf(Char)); 
end; 
 
function StringFromStream(Stream:TStream):string; 
var i:integer; 
begin 
 Stream.Read(i,SizeOf(i)); 
 SetLength(Result,i); 
 Stream.Read(Result[1],i*SizeOf(Char));
end;
естественно не забывайте читать и сохранять все по очереди...пишем в одном порядке, читаем в том же.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ругается(Acces Violation) при чтении DAT-файла Человек_Борща Общие вопросы Delphi 5 25.05.2010 19:42
Открытие и чтение DAT файла. C++ в Delphi Человек_Борща Общие вопросы Delphi 5 18.04.2010 12:50
Загрузка - Выгрузка структуры из dat файла delphinewerklin Общие вопросы Delphi 4 07.02.2010 20:00
BlockRead -чтение dat файла element Общие вопросы Delphi 2 15.06.2009 14:21
Открытие файла и создание графика на основе чисел из файла Simon..14 Общие вопросы C/C++ 8 09.06.2009 10:18