請問BCB是否有RAR的元件... |
答題得分者是:pcboy
|
szj
一般會員 發表:7 回覆:6 積分:2 註冊:2006-09-06 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
salo0610
高階會員 發表:42 回覆:120 積分:107 註冊:2003-02-18 發送簡訊給我 |
|
mypigbaby
高階會員 發表:11 回覆:168 積分:155 註冊:2006-07-20 發送簡訊給我 |
因為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 發送簡訊給我 |
提供您一個參考範例, 剛剛自己寫測試過的
<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 發送簡訊給我 |
謝謝大家的指教。後來有找到類似的程式作修改了... 以下是修改後的程式碼,主要目的是解壓縮檔案,並且等到"解壓縮完成"... 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 發送簡訊給我 |
> 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 發送簡訊給我 |
===================引 用 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 檔案的路徑或是解壓縮後的路徑有包含空白字元的話,路徑就會錯誤....... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |