2015-02-12 2 views
1

Я использую opendir(), как показано ниже, для доступа к каталогу.Ошибка открытия существующего каталога с использованием opendir в C++

DIR *dp; 
if((dp = opendir(dir.c_str())) == NULL) { 
    cout << "Error(" << errno << ") opening " << dir << endl; 
    return errno; 
} 

Однако, я продолжаю получать ошибку ниже, даже несмотря на то, что каталог существует.

Error(2) opening /path/to/folder/ 

Я могу получить список имен файлов, когда я Ls/путь/к/папке

ответ

1

Имейте в виду, что/путь/к/папке отличается от/путь/к/папке/

+0

Я пробовал оба я t дает ту же ошибку – Olivier

+0

Можете ли вы показать мне вывод: ls -l/path/to/folder /? – Marius

+1

@Marius, каковы предостережения, когда вы выбираете между версией без трейлинга и ее (по-видимому, братской) двойной версией? – fish2000

1

errno значение 2 означает ENOENT (что это abbreviaton для ошибки NO ENTRY), что является «каталог не существует, или имя является пустой строкой». Как вы определяете в коде код dir?

std::string dir = "/path/to/folder/"; 
DIR* dp = opendir(dir.c_str()); 

if (dp == NULL) 
{ 
    std::cout << "Error(" << errno << ") opening " << dir << std::endl; 
    perror("opendir"); 

    return errno; 
} 

closedir(dp); 

Update # 1:

Попробуйте позвонить вам сценарий оболочки:

main.sh folder/ foldername 

Где main.sh содержит:

#!/bin/sh                                           
path="$1$2" 
echo "$path" 
ls -l "$path" 
+0

dir - это std :: string, переданная как аргумент из основной программы. Ввод вручную ./program folder/foldername работает, но когда я использую скрипт как таковой: script.sh folder/foldername, который вызывает ./program $ folder $ foldername, он пока не работает, это одна и та же строка. – Olivier

+0

Вы запускаете сценарий оболочки из той же папки, что и 'program'? Я думаю, что это может быть несоответствие между относительными и абсолютными путями. – Kornel

+0

еще раз, что делает 'ls -l $ folder $ foldername' результат в' script.sh'? – Kornel

Смежные вопросы