![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как при использовании IStorage удалить из хранилища бинарник [D7, WinXP]
Alisher © (2005-08-24 07:41:00)Кагда удаляю бинарные данные из хранилища, они удаляются, но файл хранилища остается таких же размеров. Выходит, что он никогда не уменьшается. Кто знает, подскажите.
Rouse_ (2005-08-24 12:17:00) [1]Все верно, сжимать вот так:
class function TGSCustomStorage.ClassSupport(const AFileName: String;
Change: Boolean): HRESULT;
var
Src, Dest: IStorage;
begin
Result := S_FALSE;
if not FileExists(AFileName) then Exit;
Result := StgOpenStorage(StringToOleStr(AFileName), nil,
STGM_READ or STGM_SHARE_EXCLUSIVE, nil, 0, Src);
if Result = S_OK then
try
Result := StgCreateDocfile(StringToOleStr(String(AFileName) + '~'),
STGM_READWRITE or STGM_SHARE_EXCLUSIVE or STGM_CREATE, 0, Dest);
if Result = S_OK then
try
Result := Src.CopyTo(0, nil, nil, Dest);
finally
Dest := nil;
end;
finally
Src := nil;
if Change then
begin
if Result = S_OK then
if not DeleteFile(AFileName) then
Result := S_FALSE
else
RenameFile(AFileName + '~', AFileName);
end
else
begin
if Result = S_OK then
if not DeleteFile(AFileName + '~') then
Result := S_FALSE
end;
end;
end;
Leonid Troyanovsky (2005-08-24 11:00:00) [2]
> Alisher (24.08.05 07:41)
> Кагда удаляю бинарные данные из хранилища, они удаляются,
> но файл хранилища остается таких же размеров. Выходит, что
> он никогда не уменьшается. Кто знает, подскажите.
IStream.SetSize ?
--
Regards, LVT.