SCANDISC SIMPLE POUR LISTER LE CONTENU D'UN REPERTOIRE (+ DES SOUS-REPERTOIRES..
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008
-
21 avril 2004 à 07:36
informatique02
Messages postés8Date d'inscriptionjeudi 31 janvier 2008StatutMembreDerniè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.
informatique02
Messages postés8Date d'inscriptionjeudi 31 janvier 2008StatutMembreDerniè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és328Date d'inscriptionjeudi 26 août 2004StatutMembreDerniè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és2Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention14 février 2005 24 avril 2005 à 18:23
tres tres bon!
marche nikel
tres bien commenté!
vinc1008881
Messages postés257Date d'inscriptiondimanche 22 août 2004StatutMembreDernière intervention29 septembre 20103 6 janv. 2005 à 23:04
exelent tout simplement !
thesnakeplisken
Messages postés4Date d'inscriptionmercredi 5 février 2003StatutMembreDerniè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.
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 */
// 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
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és246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 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és17Date d'inscriptionjeudi 25 mars 2004StatutMembreDerniè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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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 ^^
27 mai 2008 à 23:58
21 août 2006 à 04:30
Merci !
24 avril 2005 à 18:23
marche nikel
tres bien commenté!
6 janv. 2005 à 23:04
4 mai 2004 à 18:06
#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);
}
30 avril 2004 à 23:39
Je vais apprendre plein de truc grace a toi! Merci :)
21 avril 2004 à 17:56
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
21 avril 2004 à 11:22
Et en + je viens de voir que je pouvais encore le simplifier un peu...
Glipper
21 avril 2004 à 10:58
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) ?
21 avril 2004 à 07:36