ディレクトリを開き、その内容を読み取り、各ファイルに関する情報を出力するコードに取り組んでいます。コマンドラインを調べて、引数が指定されていない場合は、指定されたディレクトリまたは現在のディレクトリの内容を出力します。以下のコードは、現在のディレクトリを出力するために使用されるコードとほぼ同じです。唯一の違いは、argv[1] の代わりに最初の if ステートメントに "." があることです。以下のコードは、while ループの最初の if ステートメント (現在のファイルと等しい結果を設定した後のステートメント) にヒットし、ディレクトリ内のすべてのファイルに対して言います
statBuffer の読み込み中のエラー: : そのようなファイルまたはディレクトリはありません statBuffer の読み込み中の
エラー: : そのようなファイルまたはディレクトリはありません
statBuffer の読み込み中のエラー: : そのようなファイルまたはディレクトリはありません statBuffer の読み込み中のエラー: : そのようなファイル
またはディレクトリはありません statBuffer の読み込み
中のエラー: :そのようなファイルまたはディレクトリはありません
。thaddueus thaddueus 4096 水 5 月 1 日 18:34:42 2013
statBuffer の読み込み中にエラーが発生しました: : そのようなファイルまたはディレクトリはありません
これが私が使用するコードです。
else if(argc > 1){
if((dir = opendir(argv[1])) == NULL){
perror("opendir() error");
}else{
while((entry = readdir(dir)) != NULL){
result = stat(entry->d_name, &statBuf);
if(result == -1)perror("Error while loading statBuffer: ");
else{
/*Line of code I added directly below this based upon David's suggestion*/
snprint(pathname, sizeof(pathname), "%s/%s", argv[1], entry->d_name);
/*Addition cause Segmentation fault core dumped*/
if(strncmp(entry->d_name, "..",100) == 0 ||strncmp(entry->d_name, ".",100))
continue;
errno = 0;
pws = getpwuid(statBuf.st_uid);
if(errno != 0)
perror("Error while retriving username: ");
errno = 0;
grp = getgrgid(statBuf.st_gid);
if(errno != 0) perror("Error while retriving groupname: ");
/*Prints the filename*/
printf("%s", entry->d_name);
/*Prints the username*/
printf("\t%s", pws->pw_name);
/*Prints the groupname*/
printf("\t%s", grp->gr_name);
/*Prints the file size*/
printf("\t%ld", (long)statBuf.st_size);
/*Prints the last modification time*/
printf("\t%s\n", ctime(&(statBuf.st_mtime)));
}
}
closedir(dir);
}
}
編集:それ
. thaddueus thaddueus 4096 水 5 月 1 日 18:34:42 2013
隠しファイルです。それが印刷されるかどうかはわかりませんが、他の人は印刷されません。
EDIT1:申し訳ありません。ファイル名を取得していることを追加するのを忘れました。
EDIT2:エラーステートメントを削除すると、エラーステートメントの出力が停止し、隠しファイルだけが出力されます。