Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2010, 18:59
ila ila вне форума
Прохожий
 
Регистрация: 23.10.2010
Сообщения: 14
Репутация: 10
По умолчанию INI не получается

скажите почему когда делаю так:

Цитата:
procedure TFMyServ.FormCreate(Sender: TObject);
var
ini: TIniFile;
s: TMemoryStream;
begin
S:=TMemoryStream.Create;
Ini:=TiniFile.Create(ExtractFilePath(ParamStr(0))+ 'user.ini');
ini.ReadBinaryStream('Text', 'Record', S);
//RichEdit1.Lines.LoadFromStream(s);
MUsers.Lines.LoadFromStream(S);
ini.Destroy;
s.Destroy;
end;

procedure TFMyServ.tmr1Timer(Sender: TObject);
var
ini: TIniFile;
s: TMemoryStream;
begin
S:=TMemoryStream.Create;
Ini:=TiniFile.Create(ExtractFilePath(ParamStr(0))+ 'user.ini');
//RichEdit1.Lines.SaveToStream(s);
MUsers.Lines.SaveToStream(S);
s.Seek(0, soFromBeginning);
ini.WriteBinaryStream('Text', 'Record', S);
ini.Free;
s.Free;
end;


получается, что не сохраняется, загружается текст если его много.
тоесть как бы обрезается часть сама если много строк
Ответить с цитированием
  #2  
Старый 24.10.2010, 19:28
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Обязательно использовать INI? На вид ошибок не вижу, а трейсить по такому фрагменту (не видя всей программы) - это ппц...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 24.10.2010, 19:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,106
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Потому что ini не понимает переноса строк. Сам на это наступал в молодости . Для храниения текста (больших объемов) ini лучще не использовать.
Ответить с цитированием
  #4  
Старый 24.10.2010, 19:43
ila ila вне форума
Прохожий
 
Регистрация: 23.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

а куда писать если не в ini
Ответить с цитированием
  #5  
Старый 24.10.2010, 19:47
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

ну... может, txt?
Или опять же текстовый файл с любым другим расширением?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 24.10.2010, 19:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,106
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В файл своего формата, созданный через TFileStream.
Вот пример:

Базовый класс:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
unit ModelBase;
 
interface
 
uses
  Classes, SysUtils;
 
type
 
  { TModelItemBase }
 
  TModelItemBase = class
  public
    // Load methods
    function ReadInt(AStream : TStream) : Integer;
    function ReadBool(AStream : TStream) : Boolean;
    function ReadString(AStream : TStream) : String;
    function ReadDateTime(AStream : TStream) : TDateTime;
 
    // Save methods
    procedure WriteInt(AStream : TStream; AValue : Integer);
    procedure WriteBool(AStream : TStream; AValue : Boolean);
    procedure WriteString(AStream : TStream; AValue : String);
    procedure WriteDateTime(AStream : TStream; AValue : TDateTime);
 
    // General Load/Save methods
    procedure SaveToStream(AStream : TStream); virtual; abstract;
    procedure LoadFromStream(AStream : TStream); virtual; abstract;
  end;
 
  { TModelBase }
 
  TModelBase = class
  protected
    procedure SaveToStream(AStream : TStream); virtual; abstract;
    procedure LoadFromStream(AStream : TStream); virtual; abstract;
  public
    procedure SaveToFile(AFileName : String);
    procedure LoadFromFile(AFileName : String);
  end;
 
implementation
 
{ TModelItemBase }
 
function TModelItemBase.ReadInt(AStream: TStream): Integer;
begin
  AStream.ReadBuffer(Result,SizeOf(Integer));
end;
 
function TModelItemBase.ReadBool(AStream: TStream): Boolean;
begin
  AStream.ReadBuffer(Result,SizeOf(Boolean));
end;
 
function TModelItemBase.ReadString(AStream: TStream): String;
var
  ALen : Integer;
begin
  ALen := ReadInt(AStream);
  SetLength(Result,ALen);
  If ALen > 0 Then AStream.Readbuffer(Result[1],ALen);
end;
 
function TModelItemBase.ReadDateTime(AStream: TStream): TDateTime;
begin
  AStream.ReadBuffer(Result,SizeOf(TDateTime));
end;
 
procedure TModelItemBase.WriteInt(AStream: TStream; AValue: Integer);
begin
  AStream.WriteBuffer(AValue,SizeOf(Integer));
end;
 
procedure TModelItemBase.WriteBool(AStream: TStream; AValue: Boolean);
begin
  AStream.WriteBuffer(AValue,SizeOf(Boolean));
end;
 
procedure TModelItemBase.WriteString(AStream: TStream; AValue: String);
var
  ALen : Integer;
begin
  ALen := Length(AValue);
  WriteInt(AStream,ALen);
  If ALen > 0 Then AStream.WriteBuffer(AValue[1],ALen);
end;
 
procedure TModelItemBase.WriteDateTime(AStream: TStream; AValue: TDateTime);
begin
  AStream.WriteBuffer(AValue,SizeOf(TDateTime));
end;
 
{ TModelBase }
 
procedure TModelBase.SaveToFile(AFileName: String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName,fmCreate Or fmShareExclusive);
  Try
    SaveToStream(AStream);
  Finally
    AStream.Free;
  End;
end;
 
procedure TModelBase.LoadFromFile(AFileName: String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName,fmOpenRead Or fmShareExclusive);
  Try
    LoadFromStream(AStream);
  Finally
    AStream.Free;
  End;
end;
 
end.

Собственно класс с данными (только сохр./чтение):
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  TReminderItem = class(TModelItemBase)
  private
    FName : String;
    FComments : String;
 
    FLastEvent : TDateTime;
    FNextEvent : TDateTime;
    FScheduleType : TScheduleType;
    FScheduleValue : Integer;
    FDeleteOnDone : Boolean;
    FIsDone : Boolean;
 
    FOverrideUrgDays : Boolean;
    FDaysMedUrg : Integer;
    FDaysHighUrg : Integer;
 
  protected
  public
    constructor Create;
    destructor Destroy; override;
 
    procedure Assign(ASource : TReminderItem);
 
    procedure SaveToStream(AStream: TStream); override;
    procedure LoadFromStream(AStream: TStream); override;
 
    property Name : String read FName write FName;
    property Comments : String read FComments write FComments;
 
    property LastEvent : TDateTime read FLastEvent write SetLastEvent;
    property NextEvent : TDateTime read FNextEvent write SetNextEvent;
    property ScheduleType : TScheduleType read FScheduleType write SetScheduleType;
    property ScheduleValue : Integer read FScheduleValue write SetScheduleValue;
    property DeleteOnDone : Boolean read FDeleteOnDone write SetDeleteOnDone;
    property IsDone : Boolean read FIsDone;
 
    property OverrideUrgDays : Boolean read FOverrideUrgDays write FOverrideUrgDays;
    property DaysMedUrg : Integer read FDaysMedUrg write SetDaysMedUrg;
    property DaysHighUrg : Integer read FDaysHighUrg write SetDaysHighUrg;
  end;
 
procedure TReminderItem.SaveToStream(AStream: TStream);
begin
  // Class version
  WriteInt(AStream,vrItemVersion);
 
  // Class data
  WriteString(AStream,FName);
  WriteString(AStream,FComments);
 
  WriteDateTime(AStream,FLastEvent);
  WriteDateTime(AStream,FNextEvent);
  AStream.WriteBuffer(FScheduleType,SizeOf(TScheduleType));
  WriteInt(AStream,FScheduleValue);
  WriteBool(AStream,FDeleteOnDone);
  WriteBool(AStream,FIsDone);
 
  WriteBool(AStream,FOverrideUrgDays);
  WriteInt(AStream,FDaysMedUrg);
  WriteInt(AStream,FDaysHighUrg);
end;
 
procedure TReminderItem.LoadFromStream(AStream: TStream);
var
  AClsVer : Integer;
begin
  // Class version
  AClsVer := ReadInt(AStream);
  If AClsVer > vrItemVersion Then
    Raise Exception.CreateFmt('Wrong reminder class version. Expected %d but found %d.',[vrItemVersion,AClsVer]);
 
  // Class data
  FName := ReadString(AStream);
  FComments := ReadString(AStream);
 
  FLastEvent := ReadDatetime(AStream);
  FNextEvent := ReadDatetime(AStream);
  AStream.ReadBuffer(FScheduleType,SizeOf(TScheduleType));
  FScheduleValue := ReadInt(AStream);
  FDeleteOnDone := ReadBool(AStream);
  FIsDone := ReadBool(AStream);
 
  FOverrideUrgDays := ReadBool(AStream);
  FDaysMedUrg := ReadInt(AStream);
  FDaysHighUrg := ReadInt(AStream);
end;
Ответить с цитированием
  #7  
Старый 24.10.2010, 20:15
ila ila вне форума
Прохожий
 
Регистрация: 23.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

в ини я сохранял бинарный поток, и если его просто открыть, то не виден настоящий текст, тоесть нужно сделать так, что вне программы открыв файл небыло ясно, что там написано
Ответить с цитированием
  #8  
Старый 24.10.2010, 23:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

[Здесь был совет несколько не в тему и я его стер...]
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 25.10.2010, 01:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,106
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А кто тебе мешает шифровать данные при сохраниении?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025