![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Лишняя инфа [D6]
Ламонов Олег © (2007-04-21 11:11:00)Уважаемые мастера.
Добавляется лишняя информация в файл, как ее удалить?
var
MainHeaderFile:PHeader;
Header:Header_;
type
PHeader = ^Header_;
Header_ = packed record
AssociateProgram:string[30];
MainType:string[50];
Version:string[10];
Description:string[255];
Comments:string[255];
end;
function TMyFile.CreateFile_(const AName:string):Boolean;
var
Buf:file;
begin
if FileExists(AName) = True then
begin
Result:=True
end else
begin
AssignFile(Buf, AName);
{$I-}
Rewrite(Buf,1);
{I-}
// FIndex:=OpenFile(PChar(AName),ofStructF,of_ReadWrite or of_Share_Exclusive);
New(MainHeaderFile);
MainHeaderFile^.AssociateProgram:=(Application.Title);
MainHeaderFile^.MainType:=MainExtension;
MainHeaderFile^.Version:=VersionA;
MainHeaderFile^.Description:=QualityLive;
MainHeaderFile^.Comments:=Special;
BlockWrite(Buf,MainHeaderFile^,Sizeof(MainHeaderFile^));
Dispose(MainHeaderFile);
Здесь он добавляет лишнее, через Header все Ok.
{ Header.AssociateProgram:=Application.Title;
Header.MainType:=MainExtension;
Header.Version:=VersionA;
Header.Description:=QualityLive;
Header.Comments:=Special;
BlockWrite(Buf,Header,Sizeof(Header));
}
FlushFileBuffers(TFileRec(Buf).Handle);
FileClose(FIndex);
Result:=False;
end;
Loginov Dmitry (2007-04-22 09:09:00) [1]ZeroMemory(MainHeaderFile,Sizeof( Header_));
Ламонов Олег (2007-04-22 08:09:00) [2]Все равно остается мусор.
ZeroMemory(MainHeaderFile,Sizeof(MainHeaderFile));
Loginov Dmitry (2007-04-21 14:16:00) [3]Кстати, в случае с Header также мусор получишь, если выполнишь несколько раз присвоение одному полю строк разной длины. Просто в самый первый раз мусора нет, так как содержимое глобального объекта при запуске проги автоматически обнуляется.
Loginov Dmitry (2007-04-21 13:58:00) [4]> var
> MainHeaderFile:PHeader;
> Header:Header_;
>
> type
> PHeader = ^Header_;
> Header_ = packed record
> AssociateProgram:string[30];
> MainType:string[50];
> Version:string[10];
> Description:string[255];
> Comments:string[255];
> end;
Не компилицца.
> FileClose(FIndex);
Как все перемешано! Чем не устроило CloseFile(Buf)?
> Добавляется лишняя информация в файл, как ее удалить?
Сразу после New(MainHeaderFile); делай ZeroMemory. В структуре все поля статические, так что это можно.