あなたは本当にあなたのコードを投稿するべきです(a)、しかしここに行きます。次のようなものから始めます。
#include <stdio.h>
#include <dirent.h>
int main (int argc, char *argv[]) {
struct dirent *pDirent;
DIR *pDir;
// Ensure correct argument count.
if (argc != 2) {
printf ("Usage: testprog <dirname>\n");
return 1;
}
// Ensure we can open directory.
pDir = opendir (argv[1]);
if (pDir == NULL) {
printf ("Cannot open directory '%s'\n", argv[1]);
return 1;
}
// Process each entry.
while ((pDirent = readdir(pDir)) != NULL) {
printf ("[%s]\n", pDirent->d_name);
}
// Close directory and exit.
closedir (pDir);
return 0;
}
args[1]設定されていて、実際のディレクトリを参照しているケースをチェックする必要があります。サンプルの実行でtmpは、現在のディレクトリから離れたサブディレクトリがありますが、任意の有効なディレクトリを使用できます。次のようになります。testprog tmp
[.]
[..]
[file1.txt]
[file1_file1.txt]
[file2.avi]
[file2_file2.avi]
[file3.b.txt]
[file3_file3.b.txt]
また、ファイルではなく、ディレクトリを渡す必要があることにも注意してください。私が実行するとき:
testprog tmp/file1.txt
私は得る:
Cannot open directory 'tmp/file1.txt'
これは、ディレクトリではなくファイルであるためです(ただし、卑劣なdiropen(dirname(argv[1]))場合は、イニシャルdiropenが失敗した場合に使用を試みることができます)。
(a)これは現在修正されていますが、この回答が受け入れられたので、それはあなたが渡したものすべての問題であったと思います。