![]() |
|
|
|
|
#1
|
||||
|
||||
|
Если в конец файла дописать какую-то инфу, первоначальный файл будет открываться? Хочу сделать упаковку файлов, но так, что бы первоначальный файл можно было прочитать
|
|
#2
|
|||
|
|||
|
все зависит от того, какие это файлы и как ты, или не ты, их читаешь. давай более подробную информацию.
|
|
#3
|
||||
|
||||
|
Цитата:
Мне надо записать их всех в один файл (скажем, 1.bmp) так, чтобы все программы могли прочитать этот файл и отобразить 1.bmp |
|
#4
|
||||
|
||||
|
Цитата:
Ну запихать информацию (или файл) в ЕХЕ можно, при этом будет открываться 1 файл (как тебе и нужно), но записать в bmp 10 файлов, и чтоб открывался 1 я думаю не реально. Если надо пример по сохранению в ЕХЕ, могу дать пример. |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Вот пример, который записывает из одного приложение, в другую программу (ЕХЕ) текст. Но этот текст может быть и другая программа.
При этом, программа, в которую записан текст полностью работоспособна и открывается проводником. Код:
function AttachToFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if(not(FileExists(AFileName))) then
Exit;
Try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
aStream.Seek(0, soFromEnd);
aStream.CopyFrom(MemoryStream, 0);
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
Finally
aStream.Free;
end;
Result := True;
end;
function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if(not(FileExists(AFileName))) then
Exit;
Try
aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
aStream.Seek(-SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if(iSize > aStream.Size) then begin
aStream.Free;
Exit;
end;
aStream.Seek(-iSize, soFromEnd);
MemoryStream.SetSize(iSize - SizeOf(Integer));
MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
MemoryStream.Seek(0, soFromBeginning);
Finally
aStream.Free;
end;
Result := True;
end;
////////////////////////
Вот пример загрузки (уже в записанную программу):
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
Try
LoadFromFile(ExtractFileName(ParamStr(0)), aStream); // загружаю из самого себя
Memo1.Lines.LoadFromStream(aStream)
Except
ShowMessage('Ошибка!!!');
Halt; // выхожу
end;
aStream.Free;
/// а вот пример записывания в файл:
var
aStream: TMemoryStream;
begin
AStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(aStream); // загружаю
/// записываю нужную информацию...
AttachToFile('C:\1.exe', aStream);
///////////////////////////////////////////
aStream.Free; |
|
#7
|
||||
|
||||
|
Тебе посути надо полу джойнер, полу архиватор.
Ну архиватор - zlib тебе в помощь. Ну а с джойнеров можешь поискать, в инете есть много примеров. Вот тому пример: http://forum.inattack.ru/delphi-Dela...mi-t24457.html |