2016-05-21 30 views
0

問題を解決するための解決策を見つけようとしています。 実際、C++でlibzipを使ってファイルを圧縮するための独自のツールを書いています。Libzip - エラー:アーカイブを開くときにエラーが発生しました:エラーなし

私はいくつかのテストをしたいと思っていましたが、ログから「面白い」エラーを取得しました。私はもちろん、私は、任意の.zipファイルが書かれていませんでした、=> Error : Error while opening the archive : No error を取得し、

void save(std::vector<std::string> filepath, std::string savepath){ 
int err; 

savepath += time(NULL); 
zip* saveArchive = zip_open(savepath.c_str(), ZIP_CREATE , &err); 
if(err != ZIP_ER_OK) throw xif::sys_error("Error while opening the archive", zip_strerror(saveArchive)); 
for(int i = 0; i < filepath.size(); i++){ 
    if(filepath[i].find("/") == std::string::npos){} 
    if(filepath[i].find(".cfg") == std::string::npos){ 
     err = (int) zip_file_add(saveArchive, filepath[i].c_str(), NULL, NULL); 
     if(err == -1) throw xif::sys_error("Error while adding the files", zip_strerror(saveArchive)); 
    } 

} 

if(zip_close(saveArchive) == -1) throw xif::sys_error("Error while closing the archive", zip_strerror(saveArchive)); 
} 

は、ここに私の機能です。

お手数をおかけしていただければ幸いです!

答えて

1

documentationzip_open)は、オープンに失敗した場合にのみ*errorpと設定されています。 saveArchive == nullptrをテストするか、err〜 ZIP_ER_OKを初期化してください。

P.S. '/'の検索は何もしません。あなたはそのブロックにcontinueを入れることを意味しましたか?

他の問題の行がある:

savepath += time(NULL); 

すなわちエポックからの秒の時間を返す標準time関数である場合。それはおそらくcharに切り捨てられ、そのcharがファイル名に追加されます。それはファイル名に奇妙な文字を表示させます!私はstd::chronoをテキストに変換することを提案します。

+0

私はこの愚かな「エラーなし」はもう得られませんでしたが、.zipファイルも作成されません... '/'の検索はまだ実装されていません。 返信いただきありがとうございます。 – eldten

+0

デバッガでステップ実行します。ベクターには何かがありますか?追加返品とは何ですか? –

+0

私はzip_file_addの仕組みが分からないと思います。実際、関数は圧縮してファイルをアーカイブに追加しませんが、内部のパスのみを作成します。助けてくれてありがとう。 – eldten

関連する問題