2016-12-05 9 views
0

Я хотел бы узнать, можно ли открыть каталог, а затем работать с fopen, чтобы открыть файл из него. Как и в примере:C - opendir + fopen

У меня есть MAINDIR и внутри него я file.txt, так что я хотел бы сделать следующее:

void openFile(const char * filename) 
{ 
    opendir(MAINDIR); 
    fopen(filename, "r"); 
} 

int main() 
{ 
    openFile("file.txt"); 
    return 0; 
} 

Я знаю, что я мог бы сделать: Еореп ("путь/to/main/dir/filename.txt "," r "), но я хочу нечто более общее. Откройте каталог, а затем сделать все FOPEN работу внутри этого каталога

Благодарности

+2

'opendir' не делает этого, попробуйте' chdir'. –

ответ

4

Вы можете изменить свой рабочий каталог с помощью chdir(const char *) например:

chdir("/your/path/") 
2

Если вам не нравится возиться с chdir, вы может просто построить полный путь, когда вы хотите открыть файл:

void openFile(const char * filename) 
{ 
    char fullpath[MAXPATHLEN]; 
    sprint(fullpath, "%s/%s", MAINDIR, filename); 
    fopen(fullpath, "r"); 
} 

Хотя вы, вероятно, хотите, чтобы это было ret урну что-то.

0

opendir предназначен для чтения содержимого каталога, который не изменяет пути разрешения относительных путей. Чтобы изменить начальную точку относительных путей вы должны использовать chdir:

chdir(MAINDIR); 
...fopen(relative_path,...); 
0

opendir() функция не делать то, что вы хотите. Где доступно (что не везде, так как оно указано POSIX, а не C), оно предоставляет средство для чтения записей каталога, но это не влияет на разрешение имен файлов, которое всегда выполняется в отношении текущего рабочего каталога, по крайней мере в реализациях, которые обеспечивают opendir() в первую очередь.

С другой стороны, среды POSIX обеспечивают chdir(), что изменяет текущий рабочий каталог и, следовательно, основу для разрешения относительных имен файлов. Это может достичь того, о чем вы просите. Обратите внимание, однако, что рабочий каталог является общесистемным свойством. Обычно лучше создавать и использовать либо абсолютные пути, либо пути по отношению к рабочему каталогу, и оставлять рабочий каталог таким, каким он есть при запуске программы.