2016-12-05 2 views
0

Je voudrais savoir s'il est possible d'ouvrir un répertoire, puis de travailler avec fopen pour y ouvrir un fichier. Comme dans l'exemple:C - opendir + fopen

J'ai un MAINDIR et à l'intérieur de celui-ci je file.txt donc je voudrais faire ce qui suit:

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

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

Je sais que je pouvais faire: fopen ("path/à/main/dir/filename.txt "," r ") mais je veux quelque chose de plus générique. Ouvrez un répertoire, puis faire tous les travaux fopen dans ce répertoire

Merci

+2

'opendir' ne fait pas ça, essayez' chdir'. –

Répondre

4

Vous pouvez modifier votre répertoire de travail en utilisant chdir(const char *) par exemple:

chdir("/your/path/") 
2

Si vous ne l'aimez pas déconner avec chdir, vous pourrait juste construire le chemin complet lorsque vous souhaitez ouvrir le fichier:

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

Bien que vous voulez probablement cela urn quelque chose.

0

opendir est de lire le contenu d'un répertoire, cela ne change pas la façon dont les chemins relatifs sont résolus. Pour modifier le point de départ des chemins relatifs, vous devez utiliser chdir:

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

La fonction opendir() ne fait pas ce que vous voulez. Lorsqu'il est disponible (ce qui n'est pas partout, comme spécifié par POSIX, pas C), il fournit un moyen de lire les entrées du répertoire, mais n'affecte pas la résolution du nom de fichier, toujours effectuée par rapport au répertoire de travail actuel, au moins dans les implémentations qui fournissent opendir() en premier lieu. D'autre part, les environnements POSIX fournissent chdir(), change le répertoire de travail en cours, et donc la base pour la résolution des noms de fichiers relatifs. Cela pourrait réaliser ce que vous demandez. Notez cependant que le répertoire de travail est une propriété à l'échelle du processus. Il est généralement préférable de construire et d'utiliser des chemins absolus ou des chemins relatifs au répertoire de travail, et de laisser le répertoire de travail tel quel au démarrage du programme.