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

請問BCB是否有RAR的元件...

答題得分者是:pcboy
szj
一般會員


發表:7
回覆:6
積分:2
註冊:2006-09-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-26 16:01:32 IP:220.132.xxx.xxx 訂閱
請問BCB是否有支援RAR的元件可以使用?
目前從網路上找到的壓縮元件都是支援 Zip 的格式,像是 ZipForge 等等
想請問一下各位,是否有用過支援RAR壓縮格式的元件....

因為程式有需要使用到壓縮/解壓縮,還有使用者可以輸入密碼的功能。
但是壓縮/解壓縮的格式要為 RAR 的格式,好像支援RAR格式的元件比較少...
請問是否有人能給我一點意見....謝謝


pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-26 16:07:07 IP:61.220.xxx.xxx 訂閱
用 ShellExecute 去執行C:\Program Files\WinRAR\UnRAR.exe 做解壓縮
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-26 17:33:00 IP:220.132.xxx.xxx 未訂閱
mypigbaby
高階會員


發表:11
回覆:168
積分:155
註冊:2006-07-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-30 11:48:13 IP:203.73.xxx.xxx 訂閱
因為RAR的演算法是WINRAR公司所擁有(在該公司應該是屬於最高機密)
所以網路上您應該是找不到能壓RAR的元件

如果有程式需要壓縮的話
只能用 ShellExecute
去呼叫WINRAR 做壓縮及解壓的動作
呼叫 rar a -p<設定的密碼> <欲產生的rar> <要壓縮的檔案>
解壓
unrar x -p<設定的密碼> <產生的rar>

===================引 用 szj 文 章===================
請問BCB是否有支援RAR的元件可以使用?
目前從網路上找到的壓縮元件都是支援 Zip 的格式,像是 ZipForge 等等
想請問一下各位,是否有用過支援RAR壓縮格式的元件....

因為程式有需要使用到壓縮/解壓縮,還有使用者可以輸入密碼的功能。
但是壓縮/解壓縮的格式要為 RAR 的格式,好像支援RAR格式的元件比較少...
請問是否有人能給我一點意見....謝謝


pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-30 12:11:58 IP:61.220.xxx.xxx 訂閱
提供您一個參考範例, 剛剛自己寫測試過的

<textarea class="cpp" rows="10" cols="60" name="code"> // 執行 "C:\Program Files\WinRAR\RAR.exe" 可以看到 RAR 相關參數 // 執行 "C:\Program Files\WinRAR\UnRAR.exe" 可以看到 UnRAR 相關參數 ShellExecute("","open","C:\\Program Files\\WinRAR\\RAR.exe", "a target.rar c:\\windows\\NOTEPAD.EXE ","",SW_SHOW ); ShellExecute("","open","C:\\Program Files\\WinRAR\\UnRAR.exe", "e target.rar","",SW_SHOW ); </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2007-07-30 12:12:42, 註解 無‧
szj
一般會員


發表:7
回覆:6
積分:2
註冊:2006-09-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-31 13:50:52 IP:220.132.xxx.xxx 訂閱
謝謝大家的指教。後來有找到類似的程式作修改了...    以下是修改後的程式碼,主要目的是解壓縮檔案,並且等到"解壓縮完成"...    p.s. OpenDialog1 的 property 中的 "ofNoChangeDir" 屬性要設為 true。       不然執行時的 working diretory 會找不到 UnRAR.exe....    <textarea class="cpp" rows="10" cols="60" name="code"> #define EXTRACTDIR "Extract" void __fastcall TForm1::BitBtn1Click(TObject *Sender) { if (!OpenDialog1->Execute()) return; AnsiString filename = OpenDialog1->FileName; if(!DirectoryExists(EXTRACTDIR)) CreateDir(EXTRACTDIR); AnsiString cmd; cmd.sprintf("UnRAR x -o \"%s\" \"%s\\\"", filename, EXTRACTDIR); //ShowMessage(cmd); STARTUPINFO StartupInfo; // wait until the file uncompressd PROCESS_INFORMATION ProcessInfo; ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); StartupInfo.cb = sizeof(STARTUPINFO); try { if(CreateProcess(NULL,cmd.c_str(),NULL,NULL,TRUE, CREATE_NO_WINDOW, NULL, NULL, &StartupInfo,&ProcessInfo)) { WaitForSingleObject(ProcessInfo.hProcess, INFINITE); } else MessageBox(Handle,AnsiString("Uncompress Failed!\n\n").c_str(),"提示信息",MB_OK|MB_ICONERROR); } __finally { CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); } } </textarea>
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-31 16:44:38 IP:61.220.xxx.xxx 訂閱
> OpenDialog1 的 property 中的 "ofNoChangeDir" 屬性要設為 true。
這個應該可以在程式中去設定
在 IDE 的元件的 property 設定太多東西, 以後程式拿來參考時候, 可能會忘記設定過什麼
>    cmd.sprintf("UnRAR x -o  "%s" "%s\\"", filename, EXTRACTDIR); 
這行程式對嗎 ? 在 BCB6 編譯有下面錯誤
Build
  [C   Error] Unit1.cpp(31): E2451 Undefined symbol 's'
  [C   Error] Unit1.cpp(31): E2121 Function call missing )
  [C   Error] Unit1.cpp(31): E2206 Illegal character '\' (0x5c)
  [C   Error] Unit1.cpp(31): E2206 Illegal character '\' (0x5c)
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
szj
一般會員


發表:7
回覆:6
積分:2
註冊:2006-09-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-01 09:06:26 IP:220.132.xxx.xxx 訂閱

===================引 用 pcboy 文 章===================
> OpenDialog1 的 property 中的 "ofNoChangeDir" 屬性要設為 true。
這個應該可以在程式中去設定
在 IDE 的元件的 property 設定太多東西, 以後程式拿來參考時候, 可能會忘記設定過什麼
>??? cmd.sprintf("UnRAR x -o  "%s" "%s\\"", filename, EXTRACTDIR); 
這行程式對嗎 ? 在 BCB6 編譯有下面錯誤
Build
? [C   Error] Unit1.cpp(31): E2451 Undefined symbol 's'
? [C   Error] Unit1.cpp(31): E2121 Function call missing )
? [C   Error] Unit1.cpp(31): E2206 Illegal character '\' (0x5c)
? [C   Error] Unit1.cpp(31): E2206 Illegal character '\' (0x5c)
應該是 cmd.sprintf("UnRAR x -o  \"%s\" \"%s\\\"", filename, EXTRACTDIR); 
兩個 %s 都是用雙引號括起來的....不知道為啥反斜線被吃掉了.....= =
用雙引號括起來是因為假如 rar 檔案的路徑或是解壓縮後的路徑有包含空白字元的話,路徑就會錯誤.......

編輯記錄
szj 重新編輯於 2007-08-01 18:10:01, 註解 無‧
szj 重新編輯於 2007-08-01 18:11:35, 註解 無‧
系統時間:2024-05-04 7:00:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!