Вам действительно стоит опубликовать свой код (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) Теперь это исправлено, но, поскольку этот ответ был принят, я предполагаю, что это была проблема того, что вы проходили.
person
paxdiablo
schedule
24.08.2010
opendir
возвращаетDIR *
. Он возвращает NULL в двух случаях: невозможно получить доступ к каталогу или не удалось выделить память для хранения результата. - person jweyrich   schedule 24.08.2010/root/TEST
либо не является каталогом, либо у вас нет прав для поиска в нем. Попробуйте запустить свой код, используя/tmp
или.
в качестве каталога. - person paxdiablo   schedule 24.08.2010opendir
, а неopen
. Что выводитls -ald /root /root/TEST
? - person paxdiablo   schedule 24.08.2010/dir1/dir2
, тогдаcd .
оставит вас там, аcd ..
перенесет вас в/dir1
. (и имейте в виду, что если вы хотите поговорить с кем-то конкретным, используйте текст «@paxdiablo» где-нибудь в своем комментарии - таким образом пользователь получит уведомление). - person paxdiablo   schedule 24.08.2010