線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3371
推到 Plurk!
推到 Facebook!

如何儲存一個須用特定程式才能打開之文字檔,如.doc檔要用word

答題得分者是:william
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-17 14:22:44 IP:203.70.xxx.xxx 未訂閱
請教大家: 當我用Tstringlist物件去讀取資料庫之資料表之每一筆記錄之欄位資料,然後儲存成檔案,這檔案類似.txt檔,可輕易用許多應用程式打開查看其內容,有無什麼方法做到類似如.doc檔要用word才能打開(ps:當然儲存成.db或.mdb都有密碼保護之功能,但程式須有安裝BDE或ADO才行,但我不想要安裝那些,也不想以對每個BYTE做特殊編碼保護)
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-17 15:14:07 IP:147.8.xxx.xxx 未訂閱
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-17 22:24:48 IP:211.20.xxx.xxx 未訂閱
引言: 請教大家: 當我用Tstringlist物件去讀取資料庫之資料表之每一筆記錄之欄位資料,然後儲存成檔案,這檔案類似.txt檔,可輕易用許多應用程式打開查看其內容,有無什麼方法做到類似如.doc檔要用word才能打開(ps:當然儲存成.db或.mdb都有密碼保護之功能,但程式須有安裝BDE或ADO才行,但我不想要安裝那些,也不想以對每個BYTE做特殊編碼保護)
ry_lee 你好 建議你使用TClientDataset的記憶體表格功能,即能保有資料集操作的方便性及一致性,又能達到離線操作的功能,有必要的話還可以更新資料回資料庫,這不是一舉數得嗎?(需要同時分發Midas.dll 但可以不用安裝) 發表人 - chance36 於 2004/02/17 23:07:47
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-17 22:39:35 IP:203.70.xxx.xxx 未訂閱
引言: Make use of blob fields.... http://delphi.ktop.com.tw/link.asp?topic_id=38823 http://delphi.ktop.com.tw/link.asp?topic_id=22524
william 謝謝你回覆: 但可能上述答案不是我想要的,我一支程式用Tstringlist物件去讀取.mdb之資料表記錄並存檔會有如下內容: 姓名 電話(欄位名) tom ,5651111 john,2345623 mary,3235555 mike,4569999 另一支程式會去讀取上述檔案內容,我一樣用Tstringlist物件去讀取就可以,但這樣之檔案很容易用記事本或wordpad或word程式打開,我是希望有一種作法讓這檔案不能被記事本或wordpad或word程式打開,而只能用我的程式才能打開,如此我的程式即無須依賴ado或bde,所以要分發程式也較簡單,不知道好不好做,像.doc檔只能用word而不能用記事本或wordpad打開,它的作法為何?
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-17 23:09:30 IP:203.70.xxx.xxx 未訂閱
[/quote] ry_lee 你好    1.有一個最簡易的方法,只可擋掉記事本等一般的文字檢視器,對於較高階的文字編輯器卻無效,提供你參考
  ======= 在存檔前 , 在第一個字串前插入#0(文字檔的檔字結束符號)
  StringList[0] := #0+StringList[0];
  StringList.SaveToFile('FileName');      ======= 在讀取後拿掉第一個字串前插入#0(文字檔的檔字結束符號)
  StringList.LoadFromFile('FileName');
  StringList[0] := Copy(StringList[0],2,Length(StringList[0]));
2.建議你使用TClientDataset的記憶體表格功能,即能保有資料集操作的方便性及一致性,又能達到離線操作的功能,有必要的話還可以更新資料回資料庫,這不是一舉數得嗎? 發表人 - chance36 於 2004/02/17 22:30:46 [/quote] Chance36 你好: 照你說的去做(在存檔前 , 在第一個字串前插入#0(文字檔的檔字結束符號)),但記事本仍可打開,不是你所說的打不開
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-18 09:24:00 IP:147.8.xxx.xxx 未訂閱
For programs runing on the same pc, could memory mapped file suits your need?
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-18 20:01:49 IP:203.70.xxx.xxx 未訂閱
引言: For programs runing on the same pc, could memory mapped file suits your need?
william版主你好: 我不太了解memory mapped file,另外想問你我用記事本可打開.db(paradox)及.dbf(dbase)檔,檔案內容可見只是排列位置有點凌亂,且檔案最前面有很多是看不見字型之編碼(如#0 #13),我想問你bde之table元件是否知道如何解碼並到適當位置去讀資料,以供資料感知元件顯示,對於簡單文字檔可否有較簡單方式來編號,使用記事本打開之user雖可打開檔案內容但看到之資料排列位置有點凌亂,就如同用記事本可打開.db(paradox)及.dbf(dbase)檔之結果一樣.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-19 22:38:57 IP:211.20.xxx.xxx 未訂閱
引言: 照你說的去做(在存檔前 , 在第一個字串前插入#0(文字檔的檔字結束符號)),但記事本仍可打開,不是你所說的打不開
ry_lee 你好 這個問題,在我貼出後沒多久,我也懷疑過,所以馬上測試一下,果然沒有用,正如你所說的所以我把它刪了,不好意思,造成你的困擾。 回歸正題,你的問題[如何儲存一個須用特定程式才能打開之文字檔] 1.文字檔,顧名思義,儲存文字的檔案,當然記事本一定可以開且一字不漏的一覽無遺 2.文字內容不經過編碼,又怎麼會變成亂碼呢? 所以基本上本題無解,除非用一些資料夾或檔案加密的軟體或自已寫(還是要經過編碼) 退而求其次,若想存出的檔案,讓記事本開出來只看到一堆的亂碼,這倒容易(只要經過編碼即可) ,可你何苦如此?辛苦讀資料到StringList,經過編碼存到檔案,再從檔案中讀出,還要經過解碼後才可使用你的資料, 為何不用ClientdataSet,使用MIDAS技術,輕輕鬆鬆即可存取資料,存檔讀檔,必要時還可把異動過的資料更新回資料庫(我好像在幫BorLand推銷),以上純屬個人意見,參考就好。
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-20 02:41:29 IP:203.70.xxx.xxx 未訂閱
引言: ry_lee 你好 這個問題,在我貼出後沒多久,我也懷疑過,所以馬上測試一下,果然沒有用,正如你所說的所以我把它刪了,不好意思,造成你的困擾。 回歸正題,你的問題[如何儲存一個須用特定程式才能打開之文字檔] 1.文字檔,顧名思義,儲存文字的檔案,當然記事本一定可以開且一字不漏的一覽無遺 2.文字內容不經過編碼,又怎麼會變成亂碼呢? 所以基本上本題無解,除非用一些資料夾或檔案加密的軟體或自已寫(還是要經過編碼) 退而求其次,若想存出的檔案,讓記事本開出來只看到一堆的亂碼,這倒容易(只要經過編碼即可) ,可你何苦如此?辛苦讀資料到StringList,經過編碼存到檔案,再從檔案中讀出,還要經過解碼後才可使用你的資料, 為何不用ClientdataSet,使用MIDAS技術,輕輕鬆鬆即可存取資料,存檔讀檔,必要時還可把異動過的資料更新回資料庫(我好像在幫BorLand推銷),以上純屬個人意見,參考就好。
Chance36你好: 我已很久沒碰ClientdataSet更不用說使用MIDAS技術,但我記得ClientdataSet可將快取之資料存為.xml檔及另一格式檔,若是.xml那還是容易打開,另一格式檔我就不清楚,也不清楚在程式中放ClientdataSet還要放什麼元件進去, 因為程式無放ado或bde之元件所以無法讀取.mdb或.db或.dbf檔(也因此程式不大也不須要安裝ado或bde),只能讀.txt .csv檔,但像.doc就只能用word打開 ,我想.doc檔一定事先有做某方面之處理
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-02-20 03:01:23 IP:203.204.xxx.xxx 未訂閱
引言: 將快取之資料存為.xml檔及另一格式檔,若是.xml那還是容易打開,另一格式檔我就不清楚,也不清楚在程式中放ClientdataSet還要放什麼元件進去,
To:ry_lee TClientDataset除了可存成XML另一就是其特有的格式檔(*.cds其實副檔名自定沒有也沒關係,總之檔名隨意即可),當然記事本仍可以開啟,但其中已參雜許多控制碼,應該可以符合你的基本需求 先不管如何儲存,該格式檔的讀取很簡單,只要放個TClientDataset,設定FileName:='xxxxx.cds'然後就可以開啟了(Open方法),使用方式跟一般的Tquery、TAdoQuery、TTable等資料集元件的使用一樣
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-02-20 09:44:48 IP:147.8.xxx.xxx 未訂閱
引言: 我不太了解memory mapped file,另外想問你我用記事本可打開.db(paradox)及.dbf(dbase)檔,檔案內容可見只是排列位置有點凌亂,且檔案最前面有很多是看不見字型之編碼(如#0 #13),我想問你bde之table元件是否知道如何解碼並到適當位置去讀資料,以供資料感知元件顯示,對於簡單文字檔可否有較簡單方式來編號,使用記事本打開之user雖可打開檔案內容但看到之資料排列位置有點凌亂,就如同用記事本可打開.db(paradox)及.dbf(dbase)檔之結果一樣.
Search for "memory mapped file" in ktop: http://delphi.ktop.com.tw/link.asp?topic_id=10651 Do you mean you want to encrypt the file? LockBox may be of some help: http://sourceforge.net/projects/tplockbox/
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-02-20 10:42:51 IP:211.78.xxx.xxx 未訂閱
引言: 但可能上述答案不是我想要的,我一支程式用Tstringlist物件去讀取.mdb之資料表記錄並存檔會有如下內容: 姓名 電話(欄位名) tom ,5651111 john,2345623 mary,3235555 mike,4569999 另一支程式會去讀取上述檔案內容,我一樣用Tstringlist物件去讀取就可以,但這樣之檔案很容易用記事本或wordpad或word程式打開,我是希望有一種作法讓這檔案不能被記事本或wordpad或word程式打開,而只能用我的程式才能打開,如此我的程式即無須依賴ado或bde,所以要分發程式也較簡單,不知道好不好做,像.doc檔只能用word而不能用記事本或wordpad打開,它的作法為何?
doc 檔是 binary 檔, 不是文字檔.. 你把你的資料加個 header 存成 binary 格式就跟 doc 檔做的事類似了
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-02-20 13:12:08 IP:203.70.xxx.xxx 未訂閱
引言: doc 檔是 binary 檔, 不是文字檔.. 你把你的資料加個 header 存成 binary 格式就跟 doc 檔做的事類似了 < face="Verdana, Arial, Helvetica"> shaofu你好,要如何做才能將含文字串資料之檔案給存成binary 格式或binary 檔
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-02-20 14:08:25 IP:211.78.xxx.xxx 未訂閱
引言:
引言: doc 檔是 binary 檔, 不是文字檔.. 你把你的資料加個 header 存成 binary 格式就跟 doc 檔做的事類似了 < face="Verdana, Arial, Helvetica"> shaofu你好,要如何做才能將含文字串資料之檔案給存成binary 格式或binary 檔
很久沒用 Delphi 了 T.T 複習一下.. < class="code"> type THeader = record version: word; author: array [0..32] of char; end; const MYHDR: THeader = (version: $01; author: 'shaofu'); procedure SaveStringsToFile(s: TStrings; filename: string); var f: TFileStream; begin f := TFileStream.Create(filename, fmCreate); try f.Write(MYHDR, SizeOf(THeader)); s.SaveToStream(f); finally f.Free; end; end; procedure LoadStringsFromFile(s: TStrings; filename: string); var f: TFileStream; hdr: THeader; begin f := TFileStream.Create(filename, fmOpenRead); try f.Read(hdr, SizeOf(THeader)); if (hdr.version <> MYHDR.version) then raise Exception.Create('Invalid Version'); s.LoadFromStream(f); finally f.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var s: TStrings; begin s := TStringList.Create; try s.Add('Hello World'); s.Add('Just a Test'); SaveStringsToFile(s, 'c:\1.txt'); finally s.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var s: TStrings; begin s := TStringList.Create; try LoadStringsFromFile(s, 'c:\1.txt'); ShowMessage(s.Text); finally s.Free; end; end; 以上的 code 只是簡單的 demo, 改進方向 1. header 要怎麼定, 使得不會讀到不該讀的檔 (CheckSum?) 2. 資料加密? 如果不想被人看懂原資料的話.. 這些就靠你自己多研究囉
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-02-21 13:15:09 IP:203.70.xxx.xxx 未訂閱
引言:
引言:
引言: doc 檔是 binary 檔, 不是文字檔.. 你把你的資料加個 header 存成 binary 格式就跟 doc 檔做的事類似了 < face="Verdana, Arial, Helvetica"> shaofu你好,要如何做才能將含文字串資料之檔案給存成binary 格式或binary 檔
很久沒用 Delphi 了 T.T 複習一下.. < class="code"> type THeader = record version: word; author: array [0..32] of char; end; const MYHDR: THeader = (version: $01; author: 'shaofu'); procedure SaveStringsToFile(s: TStrings; filename: string); var f: TFileStream; begin f := TFileStream.Create(filename, fmCreate); try f.Write(MYHDR, SizeOf(THeader)); s.SaveToStream(f); finally f.Free; end; end; procedure LoadStringsFromFile(s: TStrings; filename: string); var f: TFileStream; hdr: THeader; begin f := TFileStream.Create(filename, fmOpenRead); try f.Read(hdr, SizeOf(THeader)); if (hdr.version <> MYHDR.version) then raise Exception.Create('Invalid Version'); s.LoadFromStream(f); finally f.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var s: TStrings; begin s := TStringList.Create; try s.Add('Hello World'); s.Add('Just a Test'); SaveStringsToFile(s, 'c:\1.txt'); finally s.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var s: TStrings; begin s := TStringList.Create; try LoadStringsFromFile(s, 'c:\1.txt'); ShowMessage(s.Text); finally s.Free; end; end; 以上的 code 只是簡單的 demo, 改進方向 1. header 要怎麼定, 使得不會讀到不該讀的檔 (CheckSum?) 2. 資料加密? 如果不想被人看懂原資料的話.. 這些就靠你自己多研究囉 < face="Verdana, Arial, Helvetica"> shaofu你好: 我照你上述程式執行,確實可存成檔案,但是否是一個BINARY檔我不知道,我依然可用記事本程式打開該檔案,所以我猜測它應不是一個BINARY檔
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-02-23 09:32:42 IP:210.243.xxx.xxx 未訂閱
引言: shaofu你好: 我照你上述程式執行,確實可存成檔案,但是否是一個BINARY檔我不知道,我依然可用記事本程式打開該檔案,所以我猜測它應不是一個BINARY檔
word 檔也可以用 notepad 開啊... 你把 1.txt 改成 1.ryl, notepad 就開不起來了 > 要快的話,
系統時間:2024-07-05 5:01:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!