// repertoire.cpp: Des informations sur fichiers
// > informations sur un fichier (cf infoFic() et dans 'main()')
// > parcours d'un répertoire (voir dans 'main()')
//
// auteur: R.Astier
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
#include
#include
#include // pour parcours d'un répertoire
#include // pour type et taille de fichier
//include // pour type et taille de fichier
using namespace std;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
// penser à sys/stat.h
void permissions(mode_t mode,char perm[9+1]) {
// Permission propriétaire(USR) groupe(GRP) autres(OTH)
//? cout<<" permissions:"<
int infoFic(char nomF[],int & taille,int & ficS,int & rep,char perm[]) {
struct stat statInfo;
if (stat(nomF, &statInfo) == -1) return -1;
else {
taille=statInfo.st_size;
rep=S_ISDIR(statInfo.st_mode);
ficS=S_ISREG(statInfo.st_mode);
permissions(statInfo.st_mode,perm);
}
return 0;
}
// Quelques fonctions utilisant des champs de 'struc stat';
int estRepertoire(mode_t mode) { return(S_ISDIR(mode)); }
int estFicSimple(mode_t mode) { return(S_ISREG(mode)); }
int tailleFic(struct stat statInfo) { return statInfo.st_size; }
time_t tempsModif(struct stat statInfo) { return statInfo.st_mtime; }
// repA: nom absolu d'un répertoire
// Renvoie un chemin absolu ou
// '' si repA n'est pas un chemin absolu
// '' si chemin a trop de remontée (..)
string fusionChemin(string repA, string chemin) {
string fus=repA;
unsigned int ins,ind = chemin.find_first_not_of(" \t\n\r\b");
// Cas chemin: vide ou chemin absolu; cas repA n'est pas absolu
if(ind == string::npos) return fus;
else if(chemin[ind] == '/') return chemin;
else if(repA[0] != '/') return "";
else { chemin.erase(0,ind); ind=0; }
string compo;
do {
ins = chemin.find_first_of('/',ind);
if(ins == string::npos) ins=chemin.length();
// cout<> nomRep;
DIR * pRep = opendir(nomRep);
if(pRep==NULL) {
cout<<"Impossible d'ouvrir "< > > "; cin.getline( new char[80],80);
exit(1);
}
cout<<"Parcours du répertoire "<d_name;
strcpy(nomFic,nomRep); strcat(nomFic,"/");strcat(nomFic,nomDR);
nLR++;
cout.width(3); cout<d_namlen; if(lg<1) lg=1;
cout<d_name< > > "; cin.getline( new char[80],80);
return 0;
}
/*
#include
#include
DIR *opendir(char *filename);
struct dirent *readdir(DIR *dirp);
long telldir(DIR *dirp);
void seekdir(DIR *dirp, long loc);
void rewinddir(DIR *dirp);
void closedir(DIR *dirp);
int dirfd(DIR *dirp)
*/
//fin repertoire.cpp