2010-08-18 108 views
1

可能重複:
opening a rar file by c由C代碼提取RAR文件

我用c代碼來提取RAR文件。首先,我試圖找到這些圖書館。我從http://www.unrarlib.org/得到它。但它建於2002年,因此它不支持當前的rar格式。然後我檢查了http://www.rarlabs.com/rar_add.htm。它有庫,但在C++中。我對C++一無所知,所以我不能使用它們。我試圖通過使用系統函數來使用命令行工具unrar。當我在CMD中使用unrar時,它提取了文件,但是當我在C中使用它時(命令是system("unrar -e -p password protected_file.rar");) 它剛剛打開了該archieve。它沒有提取文件。現在我不知道下一步該怎麼做?有人可以建議我嗎?

這是我用來打開rar文件的代碼。系統命令ranjit是密碼。它在模塊+文件名中給出錯誤undefined symbol_system。 任何人都可以幫助我嗎?自兩天以來我一直在努力。

#include<stdio.h> 
#include<stdlib.h> 
int main(int argc, char **argv) 
    { 
    char file[20]; 
    char file2[50] = "F:\\Program Files\\WinRAR\\unrar.exe"; 
    printf("enter the name of the rar file : "); 
    gets(file); 
    puts(file); 
    system(("%s e -p ranjit %s >C:\stdout.log 2>C:\stderr.log",file2, file)); 
    getchar(); 
    return 0; 
    } 
+1

爲什麼這被標記爲功能性編程? – Greg 2010-08-18 20:33:51

+1

Duplicate:http://stackoverflow.com/questions/3514854/opening-a-rar-file-by-c – James 2010-08-18 20:49:24

+0

這個問題是延續http://stackoverflow.com/questions/3514854/opening-a-rar -file-by-c,由同一作者發佈。作者應該將附加信息編輯到原始問題中。 – bta 2010-08-18 20:54:51

回答

0

unrar的說明書頁面是here。根據手冊,命令語法如下:

unrar <command> [-<switch 1> -<switch N>] archive [files...] [path...] 

你提到您正在使用的命令unrar -e -p password protected_file.rar提取檔案。嘗試添加可選的最終參數[path...],看看是否有幫助。很可能,路徑被忽略時被認爲是當前目錄。當你從shell運行命令時,一切都按預期工作。當您在C中使用system命令運行時,您不知道當前目錄是什麼。手動指定一個目錄來提取存檔並查看是否改變了任何內容。

如果仍有問題,請嘗試將unrar命令的標準輸出和標準錯誤重定向到文本文件。該實用程序可能會向您提供有關控制檯的重要信息,因爲您沒有直接啓動它,所以您沒有看到。請嘗試:

system("unrar -e -p password file.rar >C:\stdout.log 2>C:\stderr.log"); 

並在程序退出後檢查日誌文件。