Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

как открить документ не сохраняя, если он в TMemoryStream   Найти похожие ветки 

 
integery   (2007-10-07 12:58) [0]

есть код
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);
   // seek to end of File
   // ans Ende der Datei Seeken
   aStream.Seek(0, soFromEnd);
   // copy data from MemoryStream
   // Daten vom MemoryStream kopieren
   aStream.CopyFrom(MemoryStream, 0);
   // save Stream-Size
   // die Streamgro?e speichern
   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);
   // seek to position where Stream-Size is saved
   // zur Position seeken wo Streamgro?e gespeichert
   aStream.Seek(-SizeOf(Integer), soFromEnd);
   aStream.Read(iSize, SizeOf(iSize));
   if iSize > aStream.Size then
   begin
     aStream.Free;
     Exit;
   end;
   // seek to position where data is saved
   // zur Position seeken an der die Daten abgelegt sind
   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;

procedure TForm1.Button1Click(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 aStream.LoadFromFile("Doc1.doc");
/// Memo1.Lines.SaveToStream(aStream);
 AttachToFile("Test.exe", aStream);
 aStream.Free;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 LoadFromFile("Test.exe", aStream);
 aStream.SaveToFile("111.doc");
 ///Memo1.Lines.LoadFromStream(aStream);
 aStream.Free;

end;
он позволяет сохранить и извлеч документ из exe файла, но нужно штоб запуск TForm1.Button2Click не сохранял файл а зразу запускал из aStream, или полубому нужно сохранять файл и тогда запускать.


 
jack128_   (2007-10-07 13:23) [1]

>> а зразу запускал из aStream
Запускал - это в смысле, как ShellExecute работает???

в случае именно ворда и doc файлов, мона конечно поискать, может он и умеет читать докуменнты из IStream, но это совсем мало вероятно..
В общем же случае - обязательно нужно сохранить стрим на диск.


 
integery   (2007-10-07 15:12) [2]

спасибо !!



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
15-1195700635
Slider007
2007-11-22 06:03
2007.12.23
С днем рождения ! 22 ноября 2007 четверг


15-1195735621
Bruther
2007-11-22 15:47
2007.12.23
Как сделать чтобы программа работала


15-1195670824
sdaf
2007-11-21 21:47
2007.12.23
библиотека rxlib


15-1195736070
Кот
2007-11-22 15:54
2007.12.23
css меню


15-1196157580
All More system
2007-11-27 12:59
2007.12.23
Архивация потока/строк в режиме реалнього времени