0

chdir()次の方法を使用して、現在の作業ディレクトリを実行可能ファイルのパスに変更しようとしています。

#include <iostream>
#include <string>
using namespace std;

int main(int argc,char *argv[]) {

    if(chdir(argv[0]) == 0) printf("In %s\n", argv[0]);
        else printf("Failed to change directory\n");
}

出力は次のとおりです。

Failed to change directory

なぜ動作しないchdirargv[0]ですか?この問題の他の解決策も受け入れられます。

4

2 に答える 2

4

から実行可能ファイルの名前splitpathを削除するには、または同様のものを使用する必要があります。ファイルに移動することはできません。argv[0]chdir

[編集]申し訳ありませんが、私splitpathはWindowsのものだと思います...これを行うだけです:

char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;

argv[0]実行可能ファイル名を削除するようにトリミングされました。

コマンドラインにディレクトリがまったく含まれていない可能性があることに注意してください。


これを試して、Linux(私が推測する)パラダイム全体を破っているようなものです...実行可能ファイルがどこに保存されているかを知る必要はありません。通常、出力は次のいずれかの方法で指定します。

  1. 構成ファイル(たとえば、、/usr/local/etcまたはユーザーのホームディレクトリに保持されているか、コマンドラインで指定されている可能性があります)。

  2. コマンドラインオプションの使用。

  3. 標準出力への書き込み。

于 2012-12-14T02:59:15.953 に答える
1

argv[0] には、現在のスクリプトを含む現在のスクリプトへのパスがあるためです。そのため、最後のパス区切り文字 (プラットフォームに応じて「/」、「:」、または「\」) に続くすべてをトリミングし、その結果を chdir に渡す必要があります

于 2012-12-14T07:28:36.563 に答える