全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1602
推到 Plurk!
推到 Facebook!

TFileStream To OleVariant

答題得分者是:ha0009
woodss
一般會員


發表:13
回覆:24
積分:17
註冊:2003-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-24 16:38:00 IP:61.64.xxx.xxx 未訂閱
請問如何將檔案放到OleVariant上 如下: var Fstm : TFileStream ; outole: OleVariant; begin Fstm := TFileStream.Create('C:\WINDOWS\Desktop\t.tif' ,fmShareDenyRead ); try //如何將檔案放入outole finally Fstm.Free; end;
liorex
初階會員


發表:19
回覆:60
積分:32
註冊:2002-08-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-24 17:33:01 IP:61.217.xxx.xxx 未訂閱
我沒有試過可不可行,你可以試試以下的方式  
var
 Fstm : TFileStream ;
 outole: OleVariant;
 leng : integer ;
 s : string ;
begin      Fstm := TFileStream.Create('C:\WINDOWS\Desktop\t.tif' ,fmShareDenyRead );
  try      //如何將檔案放入outole
  Fstm.Position := 0 ;
  SetLength(s,Fstm.size);
  Fstm.ReadBuffer(Pointer(s)^,Fstm.Size);
  Fstm.Position := 0 ;
  outole := s ;
  finally
  Fstm.Free;      end    
---------------------- 一切有為法 如夢幻泡影 如露亦如電 應做如是觀 ----------------------
prelude0620
一般會員


發表:3
回覆:4
積分:1
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-24 23:53:28 IP:210.68.xxx.xxx 未訂閱
依據在下的經驗, 將 Binary 轉型為 Variant Binary 的特殊字元會被重新編碼!! 因而造成內容 "失真" 所以在轉型為 Variant 之前, 可先用如 Indy 的 encode 工具 將那 "s" 先 encode 後, 再 outole := s 當然, 反之則要再 decode
woodss
一般會員


發表:13
回覆:24
積分:17
註冊:2003-07-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-25 09:41:06 IP:61.64.xxx.xxx 未訂閱
liorex 兄: 你的方法跟我的差不多 不過只能用在存文字上 prelude0620 兄: 你的提議先當備案 不過可以取出一定有可以寫入的方法ㄅ axsoft 版主大大轉貼的 用Delphi 6開發ASP上組件詳解 有取出方法 應該也有寫入方法ㄅ
prelude0620
一般會員


發表:3
回覆:4
積分:1
註冊:2003-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-26 22:37:39 IP:211.74.xxx.xxx 未訂閱
以下的範例, 是在下曾經做的 將一個 TClientDataSet, 利用 TStringStream 和編碼 轉為 Delphi 的 string 我想一般檔案, 即使是非純文字檔 應該只要再經過簡單加工即可 var strm: TStringStream; str: string; begin strm := TStringStream.Create(str); try // Fcds 是一個 TClientDataSet; with Fcds do begin EmptyDataSet(); Append(); FieldByName('SA').AsString := FSA; FieldByName('VOLNO').AsString := FVolNo; FieldByName('SEX').AsString := FSex; FieldByName('UNTCLOTH').AsString := FUntCloth; FieldByName('GIVE').AsInteger := FGive; FieldByName('RANK').AsString := FRank; FieldByName('ENDDATE').AsString := FEndDate; Post(); end; Fcds.SaveToStream(strm); strm.Position := 0; // Encode_String_HEX 是一位同事寫的, 簡易編碼的 function Result := Encode_String_HEX(strm.DataString); finally if Assigned(strm) then strm.Free(); end;
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-28 09:31:50 IP:61.30.xxx.xxx 未訂閱
你好: 你試試吧 < class="code"> function StreamToByteArrayVariant (s : TStream) : OleVariant; var Size : longint; Data : Pointer; Tmp : Variant; begin Size := S.Size; Tmp := VarArrayCreate([0, Size - 1], varByte); Data := VarArrayLock (Tmp); try S.Position := 0; S.ReadBuffer(Data^, Size); finally VarArrayUnLock (Tmp); end; result := Tmp; end;
系統時間:2024-04-29 17:12:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!