0

boost::filesystem と libgit2 を使用して、git リポジトリを自分の PC に複製しています。終了するまではすべて正常に動作し、リポジトリのクローンを作成したディレクトリを削除しようとします。これを行うと、R6010 abort() が発生します。ここまでのコードです。

{

    boost::filessytem::path dir("C:/myfolder");

    boost::filesystem::create_directory(dir);

    git_repository * repo;
    git_clone_options option = GIT_CLONE_OPTIONS_INIT;
    options.transport_flags = GIT_TRANSPORTFLAGS_NO_CHECK_CERT;

    int error = git_clone(&repo, gitUrl.c_str(), "C:/myfolder", &option);

    if(error != 0)
    {

    std::cout << giterr_last()->message;
    }

               //i)
    git_repository_free(repo);


    if(boost::filesytem::exists(dir))
    {

    //ii)   boost::filesystem::remove_all(dir);
    }

}

i) この行は、レポで使用されているメモリを解放することになっていますが、問題には影響していないようです。私がそれを使用するか、git_repository__cleanup を使用するか、まったく使用しないか。

ii) ここに問題があります。このコードは、git リポジトリがクローンされていないディレクトリを削除するときに機能しますが、この場合に使用するとクラッシュします。

4

2 に答える 2

0

問題は、libgit2が一部のファイルを読み取り専用として書き込むことになりました。API は boost::filesystem にそれらを削除させません。

于 2013-11-14T19:39:47.590 に答える