Obtenir dans un fichier le contenu d'un dossier windows

Soyez le premier à donner votre avis sur cette source.

Vue 4 343 fois - Téléchargée 665 fois

Description

Ce petit programme portable permet de capter dans un fichier le contenu d'un dossier Windows. Le mode d'emploi est le suivant : on installe dans le dossier concerné une copie du programme listedir.exe et on le lance. En réponse, on obtient aussitôt dans ce dossier un fichier listedir.txt avec la liste des fichiers et des sous-dossiers qui y sont présents. C'est utile pour connaître la taille exacte de chaque fichier. C'est utile aussi pour reprendre ensuite la liste des fichiers quand on en a besoin, par exemple, pour rédiger une documentation. Il y a des solutions pour obtenir un résultat semblable en modifiant l'explorateur de fichiers, mais l'avantage de la solution présente est de ne rien changer dans le système Windows ni dans la base de registre.

Source / Exemple :


#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
int main() {
// On capte l'information brute dans un fichier temporaire
    system("dir /O:GN *.* > listetempdir.txt");
// On va corriger les caractères ASCII OEM en ASCII ANSI
    std::ifstream ifs("listetempdir.txt");
    std::ofstream ofs("listedir.txt");
    std::string s;
    while (std::getline(ifs, s)) {
        char *buf;
        buf = new char[s.size()+1];
        OemToChar(s.c_str(), buf); 
        s = buf;
// Et on va effacer du résultat les lignes dues aux fichiers ajoutés
        bool ok;
        ok = true;                          
        if(strstr(buf, "listedir.exe")) ok = false;
        if(strstr(buf, "listetempdir.txt")) ok = false;
// L'instruction suivante sert à effacer la ligne dans laquelle
// est normalement affiché le nombre de fichiers de ce dossier.
// Mais cela ne fonctionne que pour un Windows en français.
        if(strstr(buf, "fichier(s)")) ok = false;
// on écrit le fichier résultat : listedir.txt
        if(ok) ofs << s << std::endl;
        delete [] buf;
    }
    ifs.close();
    ofs.close();
    system("del listetempdir.txt");
    return 0;
}

Conclusion :


Bienvenue à tout commentaire éventuel.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
batch sait le dossier ou il se trouve.
@set currDir=%~dp0
cs_JLN
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013
-
Ta facon de faire est très intéréssante (j'ai mis 8) surtout lorsqu'on veut gerer depuis une appli.
Pour ma proposition de batch, j'entendai par là qu'il s'agissait d'en faire de même, depuis une appli donc la gestion des répertoires était sous entendu.
Bonne prog...
@+JLN
pgl10
Messages postés
310
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Suite à ma réponse précédente je dois reconnaître que la solution de JLN a bien l'avantage de ne pas avoir à supprimer les deux fichiers listedir.exe et listedir.txt dans le dossier concerné. Mais c'est au prix de la nécessité d'au moins un copier-coller quelque part pour indiquer le dossier à explorer. A chacun de choisir le mode d'emploi qu'il préfère. Certains utilisateurs peuvent préférer le batch de JLN. Pouvoir choisir est un avantage.
pgl10
Messages postés
310
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Merci JLN,
C'est vrai que j'ai choisi de renseigner uniquement le dossier en cours. C'était pour faire le simple possible, mais on peut effectivement compliquer un peu. Par contre si le batch proposé est bien une autre solution je lui trouve deux inconvénients relatifs : 1°) il faut mettre à jour le batch avant utilisation ce qui est un peu plus prenant que de copier listedir.exe dans le répertoire concerné 2°) et ce qui est plus embêtant est de devoir convertir les caractères ASCII OEM et ASCII ANSI ( caractères acentués, etc. ) dans le fichier obtenu.
cs_JLN
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013
-
Bonjour,
Ta ligne de commande, met dans le fichier, seulement ceux du repertoire en cours.
Un parametre de fonction aurait été plus intéréssant.
Tu pouvais aussi créer un batch avec les lignes suivantes et le supprimer après.
@echo off
cls
dir cheminrep /B /O:GNE > chemin\fichier.txt
exit
Plus besoin de rechercher les lignes a supprimer.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.