我做了个文件压缩程序,现要将该文件解压后打开.
我已经成功地将该文件写到了MemoryStream中,
问:怎么从内存流中直接打开该文件?不要告诉我:memo1.Lines.LoadFromStream(MS);因为我的文件可能是mp3或exe文件.
我已经成功地将该文件写到了MemoryStream中,
问:怎么从内存流中直接打开该文件?不要告诉我:memo1.Lines.LoadFromStream(MS);因为我的文件可能是mp3或exe文件.
读到内存流中的数据仅仅是文件内容在WINRAR,WINZIP都是把需要打开的文件解到临时文件中,,过后再删除。。
题外话,MemoryStream要把文件一下子全部读到内存,倒不如就使用FileStream
procedure OpenWord(FileName,aFileName,aFileType,aMemo:string;aDataSet:TDataSet);
var
OleWord: TOleContainer;
BlobStream: TStream;
Confirmconversions, ReadOnly, AddToRecentFiles: OleVariant;
PassWordDocument, PasswordTemplate, Revert, WritePasswordDocument: OleVariant;
WritePasswordTemplate, Format, Encoding, Visible: OleVariant; begin
FileName := Trim(aDataSet.FieldByName(aFileName).AsString);
FileType := LowerCase(Trim(aDataSet.FieldByName(aFileType).AsString));
FileFullName := TempPath+FileName+FileType;
//创建BLOB流
BlobStream := aDataSet.CreateBlobStream(aDataSet.FieldByName(aMemo), bmRead);
//读取BLOB流
OleWord := TOleContainer.Create(Application);
try
OleWord.Visible := False;
OleWord.Parent := Application.MainForm;
OleWord.LoadFromStream(BlobStream);
//存储到临时文件夹中或打开文件
if (FileType='.doc')or(FileType='.rtf')or(FileType='.gog') then //只能打开Doc,Rtf,Dot文档
begin
OleWord.SaveAsDocument(FileFullName);
OleWord.Free; //创建Word和Document
WordObject := TWordApplication.Create(Application);
WordDoc := TWordDocument.Create(Application);
//定制Word中的事件
WordObject.OnDocumentBeforeSave :=Form1.OnSaveFile;
WordObject.OnQuit :=Form1.OnQuitWord;
//设置打开参数
Confirmconversions := False;
ReadOnly := False;
AddToRecentFiles := False;
PassWordDocument := EmptyParam;
PasswordTemplate := EmptyParam;
Revert := False;
WritePasswordDocument := EmptyParam;
WritePasswordTemplate := EmptyParam;
Format := EmptyParam;
Encoding := EmptyParam;
Visible := True;
WordObject.Visible := True;
WordObject.Caption := '[可加入应用程序标题]'; //可加入应用程序标题 //控制主窗体
Application.MainForm.Hide; //打开和连接临时文件夹中的文档
try
WordObject.Documents.Open(FileFullName, Confirmconversions, ReadOnly,
AddToRecentFiles, PassWordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible);
WordDoc.ConnectTo(WordObject.ActiveDocument);
except
Application.MessageBox(Pchar('打开数据库中的文档错误,请与供应商联系!'),
'错误', MB_ICONERROR+MB_OK);
WordDoc.Close;
WordObject.Quit;
Application.MainForm.Show;
end;
end
else //打开非Doc,Rtf,Dot文档
begin
OleWord.DoVerb(ovPrimary);
end;
finally
BlobStream.Free;
end;
end;