Bonjour,
J'aimerais réaliser un mini-exo mais j'ai un petit problème pour récupérer le nom du dossier que je parcours.
En gros, je reçois en paramètre un chemin du type : "/home/xxx/myDirectory" et je dois parcourir ce dossier et en sauver l'arborescence dans un fichier .arch. Rien de bien compliquer mais je n'arrive pas à récupérer le "myDirectory" dans mon programme et donc je suis obligé de passer le nom du dossier en paramètre quand j'appelle ma méthode.
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
/*
Concevez un programme C qui reçoit comme argument le nom d’un répertoire et con-
struit dans son répertoire courant un fichier d’archive dont le nom est celui du réper-
toire reçu en argument suivi de ".arch" et qui contient tous les fichiers ordinaires du
répertoire dont il a reçu le nom ainsi que les informations relatives à ces fichiers, afin
de permettre ultérieurement de reconstituer le répertoire avec ses fichiers et leurs
attributs. Si le répertoire courant contient des sous répertoires, chacun de ceux-ci sera
stocké dans un fichier d’archives distinct.
*/
/*
  struct dirent {
      ino_t          d_ino;       // numéro de l’inode 
      off_t          d_off;       //décalage vers le prochain dirent 
      unsigned short d_reclen;    // longueur de cet enregistrement
      unsigned char  d_type;      // type du fichier 
      char           d_name[256]; // nom du fichier 
  };
*/
int browseDirectory (char* name, char* fileName)
{
	unlink(fileName);
	DIR  * myDirectory 	= opendir(name);
	FILE * myFile 		= fopen (fileName, "a+");
	// On teste l'ouverture du dossier
	if (myDirectory == NULL)
	{
		printf ("Erreur lors de l'ouverture du dossier\n");
		return -1;
	}
	// On teste l'ouverture du fichier
	if (myFile == NULL)
	{	
		printf ("Erreur lors de l'ouverture du dossier\n");
		return -2;
	}
	// On initialise la structure
	struct dirent * currentFile = readdir(myDirectory);
	char* tmpDirectoryName = (char*)malloc(sizeof(char) * 1000);
 
	// On fait la boucle tant qu'on est pas à la fin du dossier	
	while (currentFile != NULL)
	{
		// On ignore le dossier courant et le dossier parent
		if (strcmp(currentFile->d_name, ".") != 0 && strcmp(currentFile->d_name, "..") != 0)
		{
			sprintf(tmpDirectoryName, "%s/%s", name, currentFile->d_name);
			// Si c'est un dossier
			if (opendir(tmpDirectoryName) != NULL)
			{
				char* tmpFileName = (char*)malloc(sizeof(char) * 1000);
				sprintf(tmpFileName, "%s.arch", currentFile->d_name);
				browseDirectory (tmpDirectoryName, tmpFileName);
				free(tmpFileName);
			}
			else
			{ 
				// On écrit dans le fichier
				fprintf(myFile, "%s\n", currentFile->d_name, currentFile->d_type);
			}
		}
		// On passe au fichier suivant
		currentFile = readdir(myDirectory);
	}
	// On ferme le fichier & le dossier
	fclose(myFile);
	closedir(myDirectory);
	return 0;
}
int main()
{
	browseDirectory("/home/e3kiel/C", "test.arch");
}
Merci d'avance pour à ceux qui prendront le temps de regarder !