0

ここで別の質問への回答が非常に役立つことがわかりました。

sys/stat.h ライブラリに制限があるようです。他のディレクトリを調べようとすると、すべてがディレクトリとして表示されました。

誰かが別のシステム機能を知っていたのか、それとも現在の作業ディレクトリの外にあるものをディレクトリとしてのみ見ているのか疑問に思っていました.

これは私を当惑させ、さまざまな検索が助けにならなかったので、誰かが提供しなければならない助けに感謝します.

これをテストするために作成したコードは次のとおりです。

#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>

int main(void) {

        int status;

        struct stat st_buf;
        struct dirent *dirInfo;

        DIR *selDir;
        selDir = opendir("../");
                                    // ^ or wherever you want to look
        while ((dirInfo = readdir(selDir))) {

                status = stat (dirInfo->d_name, &st_buf);

                if (S_ISREG (st_buf.st_mode)) {
                        printf ("%s is a regular file.\n", dirInfo->d_name);
                }
                if (S_ISDIR (st_buf.st_mode)) {
                        printf ("%s is a directory.\n", dirInfo->d_name);
                }

        }

        return 0;

}
4

2 に答える 2

2

stat通話のステータスを確認する必要があります。それは失敗しています。

the_file問題は、ファイルが実際には でしか見つからないのに、現在のディレクトリでファイルを探していることです../the_file。このreaddir()関数は、他のディレクトリに相対的な名前を付けますがstat()、現在のディレクトリに対して機能します。

それを機能させるには、次のようにする必要があります。

char fullname[1024];

snprintf(fullname, sizeof(fullname), "%s/%s", "..", dirInfo->d_name);

if (stat(fullname, &st_buf) == 0)
    ...report on success...
else
    ...report on failure...
于 2013-04-10T23:13:15.820 に答える
0

統計を印刷すると、エラー (ファイルが見つかりません) があることがわかります。

これは、stat がファイルへのパスを取得するためですが、ファイル名を指定しているだけです。次に、ガベージ値で IS_REG を呼び出します。

したがって、ファイル ../test.txt があるとします。test.txt で stat を呼び出します...これはディレクトリ ./test.txt にはありませんが、それでも IS_REG から結果を出力します。

于 2013-04-10T23:09:17.097 に答える