SCANDISC SIMPLE POUR LISTER LE CONTENU D'UN REPERTOIRE (+ DES SOUS-REPERTOIRES..

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 21 avril 2004 à 07:36
informatique02 Messages postés 8 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 8 juin 2008 - 27 mai 2008 à 23:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22116-scandisc-simple-pour-lister-le-contenu-d-un-repertoire-des-sous-repertoires

informatique02 Messages postés 8 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 8 juin 2008
27 mai 2008 à 23:58
mais comment le modifier pour qu'il marche en langage c sur linux???
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
21 août 2006 à 04:30
Oui j'ai même modifié la source pour faire un dictionnaire de tous mes fichiers, et je vais probablement utiliser cette source pour faire un projet.
Merci !
mikovitch1 Messages postés 2 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 14 février 2005
24 avril 2005 à 18:23
tres tres bon!
marche nikel
tres bien commenté!
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
6 janv. 2005 à 23:04
exelent tout simplement !
thesnakeplisken Messages postés 4 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 mai 2004
4 mai 2004 à 18:06
Salut à tous. Bravo et merci il est super ce code. Je débute en c++ et je me suis permis de modifier ton code. J'ai remis les anti-slash car je compte utiliser ce source pour lancer des fichiers et je sais pas si tous les programmes apprécieront les slash et j'ai enlevé la fonction pour écrire dans le fichier (j'ai rédirigé vers la console) car je compte intégrer les résultats dans une liste virtuelle afin de leur faire subir un classement dès que j'aurai etoffé mes connaissances.

#include <windows.h>
#include <stdio.h>
#include <conio.h>

void ScanContenuDossiers(char *CurrentDir);

int main()
{
char Dir_File[_MAX_PATH];
char Chemin[_MAX_DIR];

printf("\n\nTaper l'adresse du repertoire a scanner:\n\n");
printf("par exemple : "C://WINNT/"");
printf("\n\nChemin: ");
gets(Chemin);


printf("Veuillez Patienter ...\n");
ScanContenuDossiers(Chemin);
printf("Operation reussie !\n");

return 0;
}

void ScanContenuDossiers(char *CurrentDir)
{
/* ATTENTION, ICI IL FAUT EVITER D'UTILISER DES FONCTIONS COMME STRCPY OU STRCAT QUI RALLENTISSENT ENORMENENT" */
/* ESSAYEZ DE RAJOUTER UN STRCPY DANS LA BOUCLE do... LE TEMPS D'EXECUTION VA CONSIDERABLEMENT AUGMENTER */

char Chemin[MAX_PATH];
WIN32_FIND_DATA wData;
HANDLE listing;

// on rajoute *.* à la fin de l'adresse pour FindFirstFile()
sprintf (Chemin, "%s*.*", CurrentDir);
listing = FindFirstFile(Chemin, &wData);

// on enleve le *.* à la fin de l'adresse
sprintf (Chemin, "%s", CurrentDir);

if (listing != INVALID_HANDLE_VALUE)
{
do
{
if ((strcmp(wData.cFileName, ".."))&&((strcmp(wData.cFileName, "."))))
{
if (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// puisque c'est un repertoire, on recupere la nouvelle adresse, et on va rentrer dedans...
sprintf(Chemin, "%s%s\", CurrentDir, wData.cFileName);
// on rappelle la fonction pour qu'elle s'execute dans le repertoire (recurence)
ScanContenuDossiers(Chemin);
// reviens un repertoire en arrière
int j = strlen(Chemin)-2;
while (j>0)
{
if (Chemin[j] == '\\')
{
Chemin[j+1] = '\0';
break;
}
j--;
}
}
else // si c'est pas un dossier, c'est un fichier...

printf("%s%s\n",Chemin,wData.cFileName); // on affiche le nom du fichier

}
}while (FindNextFile(listing, &wData));
}
FindClose(listing);
}
AzraelMonu Messages postés 6 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 juillet 2004
30 avril 2004 à 23:39
Alors la bravo, c super ton truc :)

Je vais apprendre plein de truc grace a toi! Merci :)
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
21 avril 2004 à 17:56
Bon je laisse le code tel qu'il est, parceque tout le monde n'a surement pas besoin de faire un fichier pour le lire avec excel :)

Mais voila les changements à faire pour que ce soit au format tab separated (ça affiche la taille des fichiers en +)

---------------------------------------------------------

fprintf(f, "%s+ %s\n", Indentation,wData.cFileName);
--------- devient :
fprintf(f, "%s\\+ %s\n", Indentation,wData.cFileName);

---------------------------------------------------------

strcat(Indentation, " | ");
--------- devient :
strcat(Indentation, " | ");

---------------------------------------------------------

else
fprintf(f, "%s- %s\n", Indentation,wData.cFileName);
--------- devient :
else
{
DWORDLONG Taille = (wData.nFileSizeHigh << 32);
Taille += (wData.nFileSizeLow & 0xFFFFFFFF);
fprintf(f, "%s%s\t\t\t\t\t\t\tTaille:\t%d\n", Indentation,wData.cFileName, Taille);
}

---------------------------------------------------------

Voila... il est peut-être possible d'afficher de même la taille des dossiers, je n'ai pas essayé.

Pour ce qui est des dates de création, même principe normalement... Ces infos sont stoqués aussi dans wData

typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; // type
FILETIME ftCreationTime; // date de création
FILETIME ftLastAccessTime; // date du dernier acces
FILETIME ftLastWriteTime; // date de la derniere ecriture
...
} WIN32_FIND_DATA;

C'est expliqué + en détail dans msdn :)

++ Glipper
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
21 avril 2004 à 11:22
Ben, je vais voir ce que je peux faire :)
Et en + je viens de voir que je pouvais encore le simplifier un peu...
Glipper
Kornferki Messages postés 17 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 6 décembre 2004
21 avril 2004 à 10:58
Cool ce programme.

Serait il possible d obtenir egalement des attributs concernant les fichiers (taille, type, date de creation) et d ecrire tout cela dans un format tab separated (pour utilisation ulterieure dans Excel par exemple) ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
21 avril 2004 à 07:36
C'est très bon :-) Commenté à toutes les lignes, fonctionnel, utile, pftmnt indenté, c'est du beau travail pédagogique, merci ^^
Rejoignez-nous