Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Вниз

как открить документ не сохраняя, если он в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.059 c
2-1196316222
uno
2007-11-29 09:03
2007.12.23
Запись сообщения в таблице


15-1195525074
Черный Шаман
2007-11-20 05:17
2007.12.23
Технологический нарыв


15-1195712629
LewSavchu
2007-11-22 09:23
2007.12.23
facebook


2-1196258361
sydenis
2007-11-28 16:59
2007.12.23
как 2 раза открыть файл ?


2-1196241829
Галинка
2007-11-28 12:23
2007.12.23
как сдвинуть строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский