1

ファイルがコピーされない理由がわかりません。コードの一部を次に示します。

(dir_itrは directory_iterator &rootはパス)

if (!(is_directory(dir_itr->path())))
{
    cout << "copying: " << dir_itr->path().filename() << endl;
    try
    {
        copy(dir_itr->path(), root);
        remove(dir_itr->path());
    } catch (filesystem_error& ex) {
        //more code

コマンド ウィンドウに次のような結果が表示されます。

boost::filesystem::copy_file: The operation completed successfully: 
"C:\Documents and Settings\R\Desktop\New Folder\New Folder (2)\New Bitmap Image 3.bmp", 
"C:\Documents and Settings\R\Desktop\New Folder"

ただし、ファイルはコピーされません。

私は基本的に、上記のファイルをフォルダーから移動しようとしていc:\x\y\file.fileますc:\x

ディレクトリなどだけでなく、完全なファイル名が必要なため、移動できないのはなぜだと思いますか? この場合、ファイル名を追加できるようにパスルートを文字列に変換するにはどうすればよいですか? (私が試しても千のエラーが発生します。エラーが長すぎて、ウィンドウを上にスクロールしてどこから開始するかを確認することはできません)

4

2 に答える 2

1

おそらくboost::filesystem::system_completeが役立つでしょう:

(申し訳ありませんが、私はWindowsではなくMacを使用していますが、相対パスから絶対パスを取得する方法を示しています)。幸運を。

#include <iostream>
#include <boost/filesystem.hpp>

using namespace std;

int main(int argc, char *argv[]) {
    boost::filesystem::path cwd(".");
    boost::filesystem::path resolved = boost::filesystem::system_complete(cwd);

    std::cout << cwd << std::endl;
    std::cout << resolved << std::endl;
}

出力:

"."
"/private/var/folders/qw/x23nm9f11fxc45rgddb04n_w0000gn/T/CodeRunner/."
于 2013-03-01T02:54:38.770 に答える
0

この作業に戻り、以下を追加/変更しました。

try
{
    string temp = root.string() + "\\" + dir_itr->path().filename().string();
    path p(temp);
    copy(dir_itr->path(), p);
    remove(dir_itr->path());
//more code

そして、それはうまくいくように見えました。コピー時にファイル名を含める必要があるという私の仮定は正しかったと思います。

于 2013-03-04T17:51:49.673 に答える