Langage c: déplacement dans un répertoire
Résolu/Fermé
A voir également:
- Langage c: déplacement dans un répertoire
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Dev-Pascal - Télécharger - Édition & Programmation
8 réponses
mamiemando
Messages postés
33616
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 avril 2025
7 837
30 juil. 2005 à 01:46
30 juil. 2005 à 01:46
SYNOPSIS #include <sys/types.h> #include <dirent.h> struct dirent *readdir(DIR *dir); DESCRIPTION The readdir() function returns a pointer to a dirent structure representing the next directory entry in the directory stream pointed to by dir. It returns NULL on reaching the end-of-file or if an error occurred. On Linux, the dirent structure is defined as follows: struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file */ char d_name[256]; /* filename */ }; According to POSIX, the dirent structure contains a field char d_name[] of unspeci- fied size, with at most NAME_MAX characters preceding the terminating null charac- ter. POSIX 1003.1-2001 also documents the field ino_t d_ino as an XSI extension. Use of other fields will harm the portability of your programs. The data returned by readdir() may be overwritten by subsequent calls to readdir() for the same directory stream. RETURN VALUE The readdir() function returns a pointer to a dirent structure, or NULL if an error occurs or end-of-file is reached. On error, errno is set appropriately.
Qu'est ce qu'il te faut de plus ?
ch_viaud
Messages postés
2
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 septembre 2006
2
22 sept. 2006 à 14:45
22 sept. 2006 à 14:45
Presque 2 mois... tu as du te débrouiller...
Enfin, pour que ce post puisse servir à d'autre, il faut quand même ajouter qu'il n'y a pas de standard C multi-plateforme concernant la gestion des répertoires (ou bien qu'on me dise lequel, je le cherche depuis une semaine...)
Coté Microsoft, on utilise les fonctions "_findfirst", "_findnext" et "_findclose", et il est possible d'utiliser des caractères "joker" pour ne récupérer que les certains fichiers.
Coté Unix et consorts, on utilise les fonctions "opendir", "readdir", et "closedir" (contenues dans <dirent.h>).
Principales différences (en plus de la syntaxe) :
* pas de possibilité d'utiliser les "joker" avec Unix
* "_findfirst" ouvre un flux et renvoi la première entrée du répertoire, alors que "opendir" ne fait qu'ouvrir le flux.
* à part le nom des fichiers, "readdir" ne renvoit pas grand chose comme info (pour ainsi dir : rien d'intéressant), alors que les fonctions implémentées par Microsoft renvoient la taille, les attributs...
J'ai trouvé là (mail-archives.apache.org) un source pour le monde Dos/Windows qui implémente les fonctions Unix (mais qui évidemment perd au passage la possibilité de filtrer et de récupérer les attributs des fichiers)
Enfin, pour que ce post puisse servir à d'autre, il faut quand même ajouter qu'il n'y a pas de standard C multi-plateforme concernant la gestion des répertoires (ou bien qu'on me dise lequel, je le cherche depuis une semaine...)
Coté Microsoft, on utilise les fonctions "_findfirst", "_findnext" et "_findclose", et il est possible d'utiliser des caractères "joker" pour ne récupérer que les certains fichiers.
Coté Unix et consorts, on utilise les fonctions "opendir", "readdir", et "closedir" (contenues dans <dirent.h>).
Principales différences (en plus de la syntaxe) :
* pas de possibilité d'utiliser les "joker" avec Unix
* "_findfirst" ouvre un flux et renvoi la première entrée du répertoire, alors que "opendir" ne fait qu'ouvrir le flux.
* à part le nom des fichiers, "readdir" ne renvoit pas grand chose comme info (pour ainsi dir : rien d'intéressant), alors que les fonctions implémentées par Microsoft renvoient la taille, les attributs...
J'ai trouvé là (mail-archives.apache.org) un source pour le monde Dos/Windows qui implémente les fonctions Unix (mais qui évidemment perd au passage la possibilité de filtrer et de récupérer les attributs des fichiers)
ch_viaud
Messages postés
2
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 septembre 2006
2
22 sept. 2006 à 14:47
22 sept. 2006 à 14:47
Presque 2 mois... tu as du te débrouiller...
Enfin, pour que ce post puisse servir à d'autre, il faut quand même ajouter qu'il n'y a pas de standard C multi-plateforme concernant la gestion des répertoires (ou bien qu'on me dise lequel, je le cherche depuis une semaine...)
Coté Microsoft, on utilise les fonctions "_findfirst", "_findnext" et "_findclose", et il est possible d'utiliser des caractères "joker" pour ne récupérer que les certains fichiers.
Coté Unix et consorts, on utilise les fonctions "opendir", "readdir", et "closedir" (contenues dans <dirent.h>).
Principales différences (en plus de la syntaxe) :
* pas de possibilité d'utiliser les "joker" avec Unix
* "_findfirst" ouvre un flux et renvoi la première entrée du répertoire, alors que "opendir" ne fait qu'ouvrir le flux.
* à part le nom des fichiers, "readdir" ne renvoit pas grand chose comme info (pour ainsi dir : rien d'intéressant), alors que les fonctions implémentées par Microsoft renvoient la taille, les attributs...
J'ai trouvé là (mail-archives.apache.org) un source pour le monde Dos/Windows qui implémente les fonctions Unix (mais qui évidemment perd au passage la possibilité de filtrer et de récupérer les attributs des fichiers)
Enfin, pour que ce post puisse servir à d'autre, il faut quand même ajouter qu'il n'y a pas de standard C multi-plateforme concernant la gestion des répertoires (ou bien qu'on me dise lequel, je le cherche depuis une semaine...)
Coté Microsoft, on utilise les fonctions "_findfirst", "_findnext" et "_findclose", et il est possible d'utiliser des caractères "joker" pour ne récupérer que les certains fichiers.
Coté Unix et consorts, on utilise les fonctions "opendir", "readdir", et "closedir" (contenues dans <dirent.h>).
Principales différences (en plus de la syntaxe) :
* pas de possibilité d'utiliser les "joker" avec Unix
* "_findfirst" ouvre un flux et renvoi la première entrée du répertoire, alors que "opendir" ne fait qu'ouvrir le flux.
* à part le nom des fichiers, "readdir" ne renvoit pas grand chose comme info (pour ainsi dir : rien d'intéressant), alors que les fonctions implémentées par Microsoft renvoient la taille, les attributs...
J'ai trouvé là (mail-archives.apache.org) un source pour le monde Dos/Windows qui implémente les fonctions Unix (mais qui évidemment perd au passage la possibilité de filtrer et de récupérer les attributs des fichiers)
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
29 juil. 2005 à 13:33
29 juil. 2005 à 13:33
Salut,
Je pense que cette page repondra à quelques unes de tes questions:
http://c.developpez.com/faq/c/?page=fichiers
Je pense que cette page repondra à quelques unes de tes questions:
http://c.developpez.com/faq/c/?page=fichiers
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
En fait ça pourrait répondre à mes question mais je n'arrive pas à utilliser les fonctions qui y sont présentes, quelles librairies utiliser, que sont les hSearch...
Les deux fonctions qui me serviraient sont d'abord:
(avec une erreur à la compilation sur hSearch=FindFirstFile... il met undefined symbol hSearch)
WIN32_FIND_DATA File;
HANDLE hSearch;
BOOL re;
hSearch=FindFirstFile("*.*", &File);
if(hSearch == INVALID_HANDLE_VALUE){
return FALSE;
}
re=TRUE;
do {
/* Traitement */
re = FindNextFile(hSearch, &File);
} while(re);
FindClose(hSearch);
return TRUE;
et ensuite:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
main()
{
struct dirent *lecture;
DIR *rep;
rep = opendir("/tmp");
while ((lecture = readdir(rep))) {
printf("FICHIER: %s\n", lecture->d_name);
}
closedir(rep);
}
cette fonction se compile bien mais elle ne s'exécute pas...
ensuite pour la taille je n'ai pas encore essayer mais je vais m'y mettre... Si tu pouvais m'aider encore un peu se serai sympa, merci.
En fait ça pourrait répondre à mes question mais je n'arrive pas à utilliser les fonctions qui y sont présentes, quelles librairies utiliser, que sont les hSearch...
Les deux fonctions qui me serviraient sont d'abord:
(avec une erreur à la compilation sur hSearch=FindFirstFile... il met undefined symbol hSearch)
WIN32_FIND_DATA File;
HANDLE hSearch;
BOOL re;
hSearch=FindFirstFile("*.*", &File);
if(hSearch == INVALID_HANDLE_VALUE){
return FALSE;
}
re=TRUE;
do {
/* Traitement */
re = FindNextFile(hSearch, &File);
} while(re);
FindClose(hSearch);
return TRUE;
et ensuite:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
main()
{
struct dirent *lecture;
DIR *rep;
rep = opendir("/tmp");
while ((lecture = readdir(rep))) {
printf("FICHIER: %s\n", lecture->d_name);
}
closedir(rep);
}
cette fonction se compile bien mais elle ne s'exécute pas...
ensuite pour la taille je n'ai pas encore essayer mais je vais m'y mettre... Si tu pouvais m'aider encore un peu se serai sympa, merci.
mamiemando
Messages postés
33616
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 avril 2025
7 837
29 juil. 2005 à 21:18
29 juil. 2005 à 21:18
Pour la barre de progression :
avec 0<compteur<max
Bonne chance
#include <iostream> using namespace std; void sablier(unsigned int compteur,unsigned int max){ unsigned int i,largeur_char=80; static unsigned int progression=0; //Dessin de la barre de progression cout.flush(); cout << "("<<compteur<<"/"<<max<<")"; if (max==0 || compteur>max || ((largeur_char*compteur)/max<=progression) ){ cout << "\r"; return; } cout << "["; for(i=0;i<(largeur_char*compteur)/max;i++) cout << "="; progression=i; if (i<largeur_char) cout << ">"; for(;i<largeur_char-1;i++) cout << " "; cout << "]\r"; //Barre remplie if (compteur==max){ cout << endl; progression=0; } }
avec 0<compteur<max
Bonne chance
Re,
c'est bien sympa mais pour le moment j'ai un autrte problème qui, à mon avis va faire rigoler, c'est juste pour ouvrir un dossier (en mode binaire) et travailler dedans...
sinon pour la barre de progression, je ne comprends pas bien parce que je n'ai jamais fait de c++, je garde le code quand-même pour plus tard!!!
le code est ici:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
FILE *fd;
FILE *fichier;
long fsize()
{
long savepos, size;
savepos=ftell(fd);
fseek(fd,0,SEEK_END);
size=ftell(fd);
fseek(fd,savepos,SEEK_SET);
return size;
}
int main()
{
fichier=fopen("c:\\docs","rb"); //docs étant un dossier et non un
// fichier
if(fichier==NULL) printf("erreur");
else printf("c'est bon (fichier ouvert)");
printf("%d",fsize());
printf("\n\n\n");
system("pause");
}
Si qqun peut m'aider je serai content... Merci
c'est bien sympa mais pour le moment j'ai un autrte problème qui, à mon avis va faire rigoler, c'est juste pour ouvrir un dossier (en mode binaire) et travailler dedans...
sinon pour la barre de progression, je ne comprends pas bien parce que je n'ai jamais fait de c++, je garde le code quand-même pour plus tard!!!
le code est ici:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
FILE *fd;
FILE *fichier;
long fsize()
{
long savepos, size;
savepos=ftell(fd);
fseek(fd,0,SEEK_END);
size=ftell(fd);
fseek(fd,savepos,SEEK_SET);
return size;
}
int main()
{
fichier=fopen("c:\\docs","rb"); //docs étant un dossier et non un
// fichier
if(fichier==NULL) printf("erreur");
else printf("c'est bon (fichier ouvert)");
printf("%d",fsize());
printf("\n\n\n");
system("pause");
}
Si qqun peut m'aider je serai content... Merci
Re,
Ce qu'il me faut de plus? Bah que mon programme marche!!! Je ne peux m'en predre qu'à moi si ce n'est pas le cas, je le sais. Mais en l'occurence j'ai besoin d'aide et ce que tu me montre, je ne sais pas ce que ça veut dire...
J'ai trouvé une fonction qui peut m'aider mais je n'arrive pas à ouvrir mon répertoire et donc à savoir si cette fonction m'est utile ou pas.
Je ne veut pas une solution toute faites mais seulement une petite aide, parce que je ne sais pas ou je me suis trompé...
Le code que j'ai envoyé juste avant va me permètre de continuer mon programme mais si je n'arrive pas à rentrer dans le répertoire je ne pourrait le faire. Ce petit bout de code doit juste me servir à trouver la taille du répertoire...
Enfin voilà c'est tout ce que je demande, pour la barre de preogression je vais essayer de comprendre ce que tu as mis mais je ne promet rien (pour l'instant je n'ai étudié que le langage C)
Enfin sinon je te souhaites une bonne nuit quand-même et encore une fois je demande une petite aide!!! A plus.
Ce qu'il me faut de plus? Bah que mon programme marche!!! Je ne peux m'en predre qu'à moi si ce n'est pas le cas, je le sais. Mais en l'occurence j'ai besoin d'aide et ce que tu me montre, je ne sais pas ce que ça veut dire...
J'ai trouvé une fonction qui peut m'aider mais je n'arrive pas à ouvrir mon répertoire et donc à savoir si cette fonction m'est utile ou pas.
Je ne veut pas une solution toute faites mais seulement une petite aide, parce que je ne sais pas ou je me suis trompé...
Le code que j'ai envoyé juste avant va me permètre de continuer mon programme mais si je n'arrive pas à rentrer dans le répertoire je ne pourrait le faire. Ce petit bout de code doit juste me servir à trouver la taille du répertoire...
Enfin voilà c'est tout ce que je demande, pour la barre de preogression je vais essayer de comprendre ce que tu as mis mais je ne promet rien (pour l'instant je n'ai étudié que le langage C)
Enfin sinon je te souhaites une bonne nuit quand-même et encore une fois je demande une petite aide!!! A plus.