Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема при использовании TIniFile [D3, Win95/98, WinME, NT4]


allrussia ©   (2002-05-07 08:06:00) 

Утро доброе.

Вот код:
procedure...
var
ini: TiniFile;
s: string;
begin
ini:=TIniFile.Create("c:\default.ini");
s:=ini.ReadString("Section","Value","");
ini.free;
end;

Запускаю программу, получаю значение s, выхожу из программы, изменяю значение s в default.ini, запускаю программу - s не изменилось. Приходится программу 2-2 раза запускать, чтобы s ихменилось. Что за...? Кто-нибудь знает?

Пробовал ini.destroy в Form.OnDestroy не помогает
Delphi3


allrussia   (2002-05-07 11:40:00) [1]

Все работает, я просто юниты заменил и вызываю upDateFile перед ini.free


allrussia   (2002-05-07 11:25:00) [2]

спасибо, счас буду пробывать


Alx2   (2002-05-07 11:23:00) [3]

Ой, сорри!
Вот код:

procedure TIniFile.UpdateFile;
begin
WritePrivateProfileString(nil, nil, nil, PChar(FFileName));
end;


Song   (2002-05-07 11:22:00) [4]

Интересно и что ж здесь такого, что выполняет ф-ию Flush ???


Alx2   (2002-05-07 11:20:00) [5]

Действительно, D3 виноват :( не посмотрел....

Вот ее код:

procedure TMemIniFile.UpdateFile;
var
List: TStringList;
begin
List := TStringList.Create;
try
GetStrings(List);
List.SaveToFile(FFileName);
finally
List.Free;
end;
end;


Dinara   (2002-05-07 11:17:00) [6]

Может Delphi 3 виноват? В 6 есть.


Alx2   (2002-05-07 11:12:00) [7]


{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995,99 Inprise Corporation }
{ }
{*******************************************************}

unit IniFiles;

{$R-,T-,H+,X+}

interface

uses Windows, SysUtils, Classes;

type
TCustomIniFile = class(TObject)
private
FFileName: string;
public
constructor Create(const FileName: string);
function SectionExists(const Section: string): Boolean;
function ReadString(const Section, Ident, Default: string): string; virtual; abstract;
procedure WriteString(const Section, Ident, Value: String); virtual; abstract;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint; virtual;
procedure WriteInteger(const Section, Ident: string; Value: Longint); virtual;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean; virtual;
procedure WriteBool(const Section, Ident: string; Value: Boolean); virtual;
function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
function ReadFloat(const Section, Name: string; Default: Double): Double; virtual;
function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
procedure WriteDate(const Section, Name: string; Value: TDateTime); virtual;
procedure WriteDateTime(const Section, Name: string; Value: TDateTime); virtual;
procedure WriteFloat(const Section, Name: string; Value: Double); virtual;
procedure WriteTime(const Section, Name: string; Value: TDateTime); virtual;
procedure ReadSection(const Section: string; Strings: TStrings); virtual; abstract;
procedure ReadSections(Strings: TStrings); virtual; abstract;
procedure ReadSectionValues(const Section: string; Strings: TStrings); virtual; abstract;
procedure EraseSection(const Section: string); virtual; abstract;
procedure DeleteKey(const Section, Ident: String); virtual; abstract;
procedure UpdateFile; virtual; abstract;
function ValueExists(const Section, Ident: string): Boolean;
property FileName: string read FFileName;
end;

{ TIniFile - Encapsulates the Windows INI file interface
(Get/SetPrivateProfileXXX functions) }

TIniFile = class(TCustomIniFile)
public
function ReadString(const Section, Ident, Default: string): string; override;
procedure WriteString(const Section, Ident, Value: String); override;
procedure ReadSection(const Section: string; Strings: TStrings); override;
procedure ReadSections(Strings: TStrings); override;
procedure ReadSectionValues(const Section: string; Strings: TStrings); override;
procedure EraseSection(const Section: string); override;
procedure DeleteKey(const Section, Ident: String); override;
procedure UpdateFile; override;
end;

{ TMemIniFile - loads and entire ini file into memory and allows all
operations to be performed on the memory image. The image can then
be written out to the disk file }

TMemIniFile = class(TCustomIniFile)
private
FSections: TStringList;
function AddSection(const Section: string): TStrings;
procedure LoadValues;
public
constructor Create(const FileName: string);
destructor Destroy; override;
procedure Clear;
procedure DeleteKey(const Section, Ident: String); override;
procedure EraseSection(const Section: string); override;
procedure GetStrings(List: TStrings);
procedure ReadSection(const Section: string; Strings: TStrings); override;
procedure ReadSections(Strings: TStrings); override;
procedure ReadSectionValues(const Section: string; Strings: TStrings); override;
function ReadString(const Section, Ident, Default: string): string; override;
procedure Rename(const FileName: string; Reload: Boolean);
procedure SetStrings(List: TStrings);
procedure UpdateFile; override;
procedure WriteString(const Section, Ident, Value: String); override;
end;



allrussia   (2002-05-07 11:03:00) [8]

Да НЕТ такого метода:

TIniFile methods

TIniFile Alphabetically

In TIniFile

Create
DeleteKey
EraseSection
ReadBool
ReadInteger
ReadSection
ReadSections
ReadSectionValues
ReadString
WriteBool
WriteInteger
WriteString

Derived from TObject

ClassInfo
ClassName
ClassNameIs
ClassParent
ClassType
CleanupInstance
DefaultHandler
Destroy
Dispatch
FieldAddress
Free
FreeInstance
InheritsFrom
InitInstance
InstanceSize
MethodAddress
MethodName

NewInstance


Alx2   (2002-05-07 10:32:00) [9]

UpdateFile - метод в TIniFile. см. в Delphi Help компонент TIniFile и его методы.


allrussia   (2002-05-07 10:26:00) [10]

Alx2>>>

Нет такой функции


Alx2   (2002-05-07 09:02:00) [11]

Вот, в догонку:
TIniFile.UpdateFile

Flushes buffered INI file data to disk.

function UpdateFile; override;

Description

Call UpdateFile to flush buffered reads from and writes to the INI file to disk. UpdateFile is useful under Windows95, but has no effect under Windows NT as NT does not buffer INI file reads and writes.


gek   (2002-05-07 09:01:00) [12]

> Song © (07.05.02 08:59)

Да, правильно.
Извени, недосмотрел.


Song   (2002-05-07 08:59:00) [13]

2gek © (07.05.02 08:54)
Приведёный пример - это и есть чтение.

2allrussia © (07.05.02 08:06)
У Вас запись на диск кэшируется, и данные записаться не успевают перед тем как Вы их повторно читаете. Вижу только такое объснение.


Alx2   (2002-05-07 08:58:00) [14]

Просто они кэшируются. Надо сбрасывать кэш.


gek   (2002-05-07 08:54:00) [15]

Очень странно.
Я с таким честно говоря не сталкивался.
Может перейти на версию выше?
Единственное, как читаешь ini; приведи код.


Наверх

Титульная страница Поиск, карта сайта Написать письмо