最終更新 - 回答は受け入れられた回答のコメントにあります。dirent.hのCの使用
まず、この質問には他にも多くの回答があります。私はそれらのほとんどを経験してきました。このコードは、他の多くの回答を通したものです。私がしたいのは、ディレクトリ内のすべてのファイルへの完全なパスに到達することだけです。
#include <limits.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
DIR *d;
struct dirent * dir;
char fullpath[PATH_MAX + 1];
d = opendir("/home/adirectory");
if(d != NULL)
{
while((dir = readdir(d)) != NULL)
{
realpath(dir->d_name, fullpath);
printf("[%s]\n", fullpath);
printf("%s\n", dir->d_name);
}
// addition of the following line yields
// Value too large for defined data type
perror("Something isn't working: ");
closedir(d);
}
return 0;
}
更新#3:
失敗したコールは、私はすぐにwhileループの後 PERROR持っている理由である、dir = readdir(d)
です。
更新#2:
これはCentOSの、およびUbuntuのGCC 4.8.5 +上だけで正常に動作します。 Solaris gcc 4.5.2で動作しません。
更新: エラーメッセージがあります:定義されたデータ型
ため
値が大きすぎる...しかし、私はこれを引き起こす可能性があるかわからないんだけど。
これは、プログラムを実行している現在の作業ディレクトリを表示するだけです。それでも、実際には、 "。"以外のディレクトリ内のファイルは表示されません。と ".."。何がありますか?許可の問題がありますか?このソリューションは2017年には機能しませんか?
これをそのままコンパイルして実行してくれて、うまく動作します。あなたは '/ home/adirectory'に対して読み込みと実行の許可を持っていますか? 'cd/home/adirectory'を試して、' ls'を実行して結果を得ることができるかどうかを見てください。 – lurker
これはLinux上で動作します。私は自分のホームディレクトリになるようにディレクトリを変更しました。 – wallyk
私は読み取り権のみが必要ですか? – LBaelish