Цитата:
Сообщение от cyborgg4655
очень жаль( Придется воспользоваться запороленным сторониим файлом..
|
Это правильное решение.
Можно правда ещё дописывать к файлу текст
Код:
...
const
metka = 'MyText:';
procedure StrToFile (FileName, s :string);
var
pst: longword;
psb: string;
begin
with TFileStream.Create(FileName, fmOpenReadWrite) do
try
try
if Size < SizeOf(pst) then Abort;
Seek( - SizeOf(pst), soFromEnd);
ReadBuffer(pst, SizeOf(pst));
if pst + longword(length(metka)) + SizeOf(pst) > Size then Abort;
Position:= pst;
SetLength(psb, length(metka));
ReadBuffer(psb[1], length(metka));
if psb <> metka then Abort;
except on eAbort do
begin
pst:= Size;
Position:= pst;
WriteBuffer(metka[1], length(metka));
end;
end;
WriteBuffer(s[1], length(s));
WriteBuffer(pst, SizeOf(pst));
Size:= Position;
finally
Free;
end;
end;
и потом его считывать
Код:
...
const
metka = 'MyText:';
function StrFromFile (FileName: string): string;
var
pst: longword;
psb: string;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
try
if Size < SizeOf(pst) then Abort;
Seek( -SizeOf(pst), soFromEnd);
ReadBuffer(pst, SizeOf(pst));
if pst + Longword(Length(metka)) + SizeOf(pst) > Size then Abort;
Position:= pst;
SetLength(psb, length(metka));
ReadBuffer(psb[1], length(metka));
if psb <> txt then Abort;
SetLength(Result, Size - pst - length(metka) - SizeOf(pst));
if length(Result) > 0 then ReadBuffer(Result[1], length(Result));
except on eAbort do Result:= '';
end;
finally
Free;
end;
end;
но для этого тогда ещё нужно засунуть в ресурсы спец прогу которая будет появляться на диске, запускаться и после "отпускания" оськой основного файла дописывать к нему инфу, а затем батником самоуничтожаться, одним словом, гимор.