1

私は Ubuntu で相対パスを開こうとしていますが、最初のフォルダーを開いた後 - と呼ばれる14- コードは内部のフォルダーを開くことができません - と呼ばれます15:

int pathsCtr; // number of folders in RelativeArray

char ** RelativeArray; // the folders in the relative path, currently: 

RelativeArray[0] = "14";

RelativeArray[1] = "15";
// some code before 

if (pathsCtr > 0 && flag == TRUE) // then we have a relative path
{
    int j = 0;
    while (j < pathsCtr)  // run until the last path and open every one
    {
        printf("\n%s\n" , RelativeArray[j]);
        dirp = opendir(RelativeArray[j]);  // open all directories until the last one
        if (dirp == NULL)
                return -1;
        j++; // proceed to the next directory
    }

    flag = FALSE; // turn off the flag , we'll never go near this again
}

j == 0この行の場合:動作dirp = opendir(RelativeArray[j]);し、動作しdirpませんNULL

しかし、j == 1その行がdirp = opendir(RelativeArray[j]);失敗し、.dirpNULL

私は何を間違っていますか?

編集:

RelativeArray上記のコードの前にmalloc for を実行しているとします。

4

1 に答える 1

6

opendir() は、その内容を読み取るためにディレクトリを開きますが、プロセスの作業ディレクトリは変更しません。

サブディレクトリにアクセスするには、現在の作業ディレクトリからの相対パス (または絶対パス) で指定する必要があります。

文字列を適切な区切り文字で連結することで、おそらくこれを行うことができます。

opendir() によって返されたディレクトリ ストリーム ポインタに対して、それが null でないことを確認する以外に何もしていないように見えるため、これが使用したい関数ではない可能性が高いです。代わりに chdir() を見たいと思うかもしれませんが (man 2 chdir)、望ましくない結果について考えてください。

于 2012-06-17T22:54:06.263 に答える