IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Nom du dossier courant via opendir ?


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut Nom du dossier courant via opendir ?
    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 !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    getcwd() retourne le chemin du répertoire courant. Mais je ne sais pas si c'est vraiment ça que tu veux...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    getcwd() retourne le chemin du répertoire courant. Mais je ne sais pas si c'est vraiment ça que tu veux...
    C'est pas tout à fait ça...

    En fait quand je reçois la chaine "/home/truc/document", j'aimerais récuperé seulement "document"
    Merci pour la réponse en tout cas

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    Utilise la fonction strrchr()
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Utilise la fonction strrchr()
    Niquel merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération du nom du dossier courant pour backup
    Par gambic dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 10/06/2013, 19h01
  2. Dossier accessible via n'importe quel nom de domaine
    Par p4ndore dans le forum Apache
    Réponses: 1
    Dernier message: 14/06/2011, 23h16
  3. Récupérer le nom du dossier du fichier courant
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/06/2008, 12h40
  4. [RegEx] nom dossier courant
    Par berok37 dans le forum Langage
    Réponses: 2
    Dernier message: 31/12/2007, 16h59
  5. [DOS] nom du dossier courant en batch ?
    Par budhax dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 01/04/2007, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo