2

私のexeを含むディレクトリに、「saves」というフォルダがあります。このディレクトリに含まれるファイルを表示したい。

ここにあるコードを使用しました: Listing directory contents using C and Windows

今、トリッキーな部分です。ディレクトリとして使用する.\\saves\\と、パスが見つからないことがわかります。しかし、私が..\\release\\saves\\それを使用すると、うまく機能します。しかし、それはばかげています。親フォルダーに移動したくありません。特に、ユーザーがexeを含むディレクトリに付けた名前がわからないことに関して(私の場合は「リリース」ですが、ユーザーが何をしているのかは誰にもわかりません:-D)。

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#fully_qualified_vs._relative_pathsを読みましたが、あまり役に立ちませんでした。

saves\\orも試し.\saves\\ましたが、どちらも機能しません。

誰かがこれを修正する方法を教えてくれることを願っています。

4

4 に答える 4

2

現在の作業ディレクトリのパスからではなく、実行可能ファイルへのパスからの相対パスである場合は、実行可能ファイルへのGetModuleFileName()フルパスを取得するために使用できます。次に、パスの末尾から実行可能ファイルの名前を削除し、それを使用してパスを構築します。

std::string executable_directory_path()
{
    std::vector<char> full_path_exe(MAX_PATH);

    for (;;)
    {
        const DWORD result = GetModuleFileName(NULL,
                                               &full_path_exe[0],
                                               full_path_exe.size());

        if (result == 0)
        {
            // Report failure to caller.
        }
        else if (full_path_exe.size() == result)
        {
            // Buffer too small: increase size.
            full_path_exe.resize(full_path_exe.size() * 2);
        }
        else
        {
            // Success.
            break;
        }
    } 

    // Remove executable name.
    std::string result(full_path_exe.begin(), full_path_exe.end());
    std::string::size_type i = result.find_last_of("\\/");
    if (std::string::npos != i) result.erase(i);

    return result;
}
于 2013-03-05T15:11:46.657 に答える
0

boost::filesystem http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/index.htmを使用します。

おまけとして、オペレーティング システムに依存しないコードを入手できます。

于 2013-03-05T15:13:32.020 に答える
0

あなたの間違いは\\saves\\、検索パラメーター/文字列を使用して指定するのを忘れていたと思います

saves\\*

これにより、任意のファイルまたはフォルダーが検索されます

于 2013-03-05T15:12:13.690 に答える