begin process at 2010 02 09 23:47:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > SNAPSHOT DISQUE DUR

SNAPSHOT DISQUE DUR


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :snapshot, image, scanner, disque, fichiers Niveau :Débutant Date de création :09/05/2007 Date de mise à jour :11/05/2007 10:49:51 Vu :8 156

Auteur : naigeon

Ecrire un message privé
Site perso
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

Cette classe permet :

* De faire un snapshot d'un disque dur ou d'un répertoire en scannant récursivement tous les fichiers et sous dossiers présents. Le parcours de l'arborescence a été dérecursifié grâce à une pile pour garder des performances correctes. Le parcours est donc rapide et efficace. Le résultat du snapshot est stocké en attribut de la classe.

* De comparer deux snapshots du disque ou du répertoire scanné. La comparaison fournit un Dictionnaire dont les modifications entre les deux snapshot sont marquées en rouge en format Html. (balise span, attribut style et color).

On garde en mémoire le nom des fichiers, leur date de création ainsi que leur taille. La comparaison s'effectue sur tous ces critères.


Source

  • public struct OneFile
  • {
  • public String size;
  • public String lastDate;
  • }
  • ///<summary>This class is used for hard drive methods</summary>
  • ///<remarks>
  • ///Contains method for hard drive snapshot, comparing hard drive snapshot and incrementing the number of scaned files
  • ///</remarks>
  • class DriveAccess
  • {
  • /// <summary>
  • /// StringCollection containing the scaned folder paths
  • /// </summary>
  • //private static String[,] _allFiles;
  • Dictionary<String, OneFile> _allFiles;
  • public Dictionary<String, OneFile> allFiles
  • {
  • get { return _allFiles; }
  • set { _allFiles = value; }
  • }
  • /// <summary>
  • /// Construct, instanciates the StringCollection
  • /// </summary>
  • public DriveAccess()
  • {
  • //allFiles = new String[50000,3];
  • _allFiles = new Dictionary<String, OneFile>();
  • }
  • /// <summary>
  • /// Methods which gets all files and folders in a directory. It uses a Stack which is the best way to
  • /// deal with non recursive algorithm for scan.
  • /// </summary>
  • /// <param name="inDirectory">The directory we want to scan</param>
  • public void GetAllFiles(String inDirectory)
  • {
  • // Define new stack
  • Stack<String> myStack = new Stack<String>();
  • // Get all subdirectories in inDirectory
  • String[] files = Directory.GetFileSystemEntries(inDirectory);
  • // Define String containing the poped value from stack
  • String poped;
  • // We push all subdirectories in the stack
  • foreach (String fileName in files)
  • {
  • myStack.Push(fileName);
  • }
  • int i = 0;
  • // Let's do the main loop
  • while (myStack.Count > 0)
  • {
  • // Pop a value
  • poped = myStack.Pop();
  • // If it is a directory
  • if (Directory.Exists(poped))
  • {
  • try
  • {
  • // Get it's subdirectories
  • files = Directory.GetFileSystemEntries(poped);
  • // Push these subdirectories
  • foreach (String fileName in files)
  • {
  • myStack.Push(fileName);
  • }
  • }
  • catch
  • { }
  • }
  • // We got a file
  • else
  • {
  • // Get informations about the file
  • FileInfo myFileInfo = new FileInfo(poped);
  • // Add it to the StringCollection attribute
  • //allFiles[i, 0] = poped;
  • //allFiles[i, 1] = myFileInfo.Length.ToString();
  • //allFiles[i, 2] = myFileInfo.LastWriteTime.ToString();
  • //i++;
  • OneFile myOneFile;
  • myOneFile.size = myFileInfo.Length.ToString();
  • myOneFile.lastDate = myFileInfo.LastWriteTime.ToString();
  • _allFiles[poped] = myOneFile;
  • // Number of scaned files and directories ++
  • incNum();
  • }
  • }
  • }
  • /// <summary>
  • /// Compares two StringCollections and returns the differences between these StringCollections
  • /// </summary>
  • /// <param name="inStringCollec">One of the StringCollection we want to compare</param>
  • /// <returns>Differences between the two StringCollections</returns>
  • public Dictionary<String, OneFile> compare(Dictionary<String, OneFile> inStringCollec)
  • {
  • // Define the StringCollection we will return
  • Dictionary<String, OneFile> returnCollection = new Dictionary<String, OneFile>();
  • OneFile myTempOneFile;
  • // Foreach String into one of the String[,]
  • foreach(KeyValuePair<String, OneFile> myPair in _allFiles)
  • {
  • if (inStringCollec.ContainsKey(myPair.Key))
  • {
  • if (inStringCollec[myPair.Key].lastDate != myPair.Value.lastDate)
  • {
  • myTempOneFile.lastDate = "<span style=\"color:red;\">" + _allFiles[myPair.Key].lastDate + "</span>";
  • myTempOneFile.size = _allFiles[myPair.Key].size;
  • returnCollection[myPair.Key] = myTempOneFile;
  • }
  • if (inStringCollec[myPair.Key].size != myPair.Value.size)
  • {
  • myTempOneFile.lastDate = _allFiles[myPair.Key].lastDate;
  • myTempOneFile.size = "<span style=\"color:red;\">" + _allFiles[myPair.Key].size + "</span>";
  • returnCollection[myPair.Key] = myTempOneFile;
  • }
  • }
  • else
  • {
  • myTempOneFile.lastDate = _allFiles[myPair.Key].lastDate;
  • myTempOneFile.size = _allFiles[myPair.Key].size;
  • returnCollection["<span style=\"color:red;\">" + myPair.Key + "</span>"] = myTempOneFile;
  • }
  • }
  • return returnCollection;
  • }
  • }
    public struct OneFile
    {
        public String size;
        public String lastDate;
    }
    
    ///<summary>This class is used for hard drive methods</summary>
    ///<remarks> 
    ///Contains method for hard drive snapshot, comparing hard drive snapshot and incrementing the number of scaned files
    ///</remarks> 
    class DriveAccess
    {
        /// <summary>
        /// StringCollection containing the scaned folder paths
        /// </summary>
        //private static String[,] _allFiles;
        Dictionary<String, OneFile> _allFiles;

        public Dictionary<String, OneFile> allFiles
        {
            get { return _allFiles; }
            set { _allFiles = value; }
        }
        
        /// <summary>
        /// Construct, instanciates the StringCollection
        /// </summary>
        public DriveAccess() 
        {
            //allFiles = new String[50000,3];
            _allFiles = new Dictionary<String, OneFile>();
        }

        /// <summary>
        /// Methods which gets all files and folders in a directory. It uses a Stack which is the best way to
        /// deal with non recursive algorithm for scan.
        /// </summary>
        /// <param name="inDirectory">The directory we want to scan</param>
        public void GetAllFiles(String inDirectory)
        {
            // Define new stack
            Stack<String> myStack = new Stack<String>();

            // Get all subdirectories in inDirectory
            String[] files = Directory.GetFileSystemEntries(inDirectory);

            // Define String containing the poped value from stack
            String poped;

            // We push all subdirectories in the stack
            foreach (String fileName in files)
            {
                myStack.Push(fileName);
            }

            int i = 0;

            // Let's do the main loop
            while (myStack.Count > 0)
            {
                // Pop a value
                poped = myStack.Pop();

                // If it is a directory
                if (Directory.Exists(poped))
                {
                    try
                    {
                        // Get it's subdirectories
                        files = Directory.GetFileSystemEntries(poped);

                        // Push these subdirectories
                        foreach (String fileName in files)
                        {
                            myStack.Push(fileName);
                        }
                    }
                    catch
                    { }
                }
                // We got a file
                else
                {
                    // Get informations about the file
                    FileInfo myFileInfo = new FileInfo(poped);
                    
                    // Add it to the StringCollection attribute
                    //allFiles[i, 0] = poped;
                    //allFiles[i, 1] = myFileInfo.Length.ToString();
                    //allFiles[i, 2] = myFileInfo.LastWriteTime.ToString();
                    //i++;
                    OneFile myOneFile;
                    myOneFile.size = myFileInfo.Length.ToString();
                    myOneFile.lastDate = myFileInfo.LastWriteTime.ToString();

                    _allFiles[poped] = myOneFile;

                    // Number of scaned files and directories ++
                    incNum();
                }
            } 
        }

        

        /// <summary>
        /// Compares two StringCollections and returns the differences between these StringCollections
        /// </summary>
        /// <param name="inStringCollec">One of the StringCollection we want to compare</param>
        /// <returns>Differences between the two StringCollections</returns>
        public Dictionary<String, OneFile> compare(Dictionary<String, OneFile> inStringCollec)
        {
            // Define the StringCollection we will return
            Dictionary<String, OneFile> returnCollection = new Dictionary<String, OneFile>();
            OneFile myTempOneFile;

            // Foreach String into one of the String[,]
            foreach(KeyValuePair<String, OneFile> myPair in _allFiles)
            {
                if (inStringCollec.ContainsKey(myPair.Key))
                {
                    if (inStringCollec[myPair.Key].lastDate != myPair.Value.lastDate)
                    {
                        myTempOneFile.lastDate = "<span style=\"color:red;\">" + _allFiles[myPair.Key].lastDate + "</span>";
                        myTempOneFile.size = _allFiles[myPair.Key].size;
                        returnCollection[myPair.Key] = myTempOneFile;
                    }

                    if (inStringCollec[myPair.Key].size != myPair.Value.size)
                    {
                        myTempOneFile.lastDate = _allFiles[myPair.Key].lastDate;
                        myTempOneFile.size = "<span style=\"color:red;\">" + _allFiles[myPair.Key].size + "</span>";
                        returnCollection[myPair.Key] = myTempOneFile;
                    }
                }
                else
                {
                    myTempOneFile.lastDate = _allFiles[myPair.Key].lastDate;
                    myTempOneFile.size = _allFiles[myPair.Key].size;
                    returnCollection["<span style=\"color:red;\">" + myPair.Key + "</span>"] = myTempOneFile;
                }
            }
            return returnCollection;
        }
    }

 Conclusion

J'ai respecté un guide de style assez fréquent lors du développement de cette classe.
Cette classe fait partie d'un projet de développement logiciel bien plus volumineux visant à automatiser des tests de Setups.


 Historique

09 mai 2007 15:01:27 :
Mise a jour
11 mai 2007 10:49:51 :
Modification de la structure de données pour avoir des performances accrues. Passage d'un tableau statiaue à trois dimensions à un Dictionnaire avec indexeur.

 Sources de la même categorie

Source avec Zip PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD par whismeril
Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES) par jray
Source avec Zip Source avec une capture SURVEILLER FICHIERS CRÉÉS AVEC FILESYSTEMWATCHER AMÉLIORÉ par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip REDIMENSION D'IMAGE EN C# par VinceMonkeyz
Source avec Zip Source .NET (Dotnet) CONVERTION D'UNE IMAGE EN G-CODE, GRAVURE CNC par gourky
Source avec Zip Source .NET (Dotnet) TRAITEUR D'IMAGE (MINI) par ycyril
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE CHARGEMENT D'UNE IMAGE DEPUIS LE DISQUE DUR SILVERLI... par silverressources
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE PROJECTION 3D SILVERLIGHT 3 par silverressources

Commentaires et avis

Commentaire de Warny le 10/05/2007 06:58:04

Pourquoi tu n'utilises pas une classe générique list<> à la place du tableau ?

Commentaire de Patrice99 le 10/05/2007 09:28:24

Voir aussi :
VBWinBackup : Sauvegarde d'une arborescence de fichiers
www.vbfrance.com/code.aspx?ID=36613
(pas de tableau à dimensionner à l'avance, compression > 2Go, ...)

Commentaire de naigeon le 10/05/2007 11:19:35

Salut,

@Warny :
Le problème de la classe génériaue List<,>, c'est qu'on ne peut avoir qu'une seule dimension. Or j'ai besoin de stocker trois attributs par fichier : le nom, la taille et la date de modification. D'où le tableau : nom fichier | taille | date

Après, on pourrait effectivement passer par une liste de références qui pointent sur des structures à trois éléments (tableaux ou listes), mais l'allocation dynamique dans la boucle principale nous ferait perdre en performances.

Avec une bonne vieille allocation statique, nous n'avons pas ce problème. Reste à allouer correctement le tableau.

Ceci étant dit, si quelqu'un voit une solution autre que l'allocation statique d'un tableau, je suis prenneur ;)

Commentaire de Warny le 10/05/2007 11:59:42

Essaye ça (bien)

struct fichier {
   string nom,
   int taille,
   datetime date,
}

List<fichier>


ou ça (mal)

List<List<string>>

Commentaire de naigeon le 10/05/2007 14:24:28

Oui bien sûr, c'est ce que je disais, nous allons avoir une allocation dynamique de listes pointées par la liste principale, ce qui risque de ralentir passablement l'algo.

Je vais tout de même tester et je vous donne des nouvelles comparé au tableau.

Commentaire de Warny le 10/05/2007 14:51:21

Dans le cas d'un struct, l'allocation est statique :
la déclaration d'un variable se fait comme ça :
fichier toto;
toto.nom=...

Commentaire de naigeon le 11/05/2007 10:51:50

Merci Warny, j'ai repris ton idée en remplacant simplement la liste par un  Dictionnaire. Le dictionnaire étant indexé, la comparaison des snapshots est très rapide.

Commentaire de artpinze le 23/05/2007 06:37:32

bonjour je suis hors sujet je pense ,mais peut-etre que vous pourez m'aider je cherche un logiciel ou un programme  qui serais capable de scanner des fichiers MP3 sur un disque dur
pour pouvoir copier coller juste les titre pour les mettre sur un editeur de texte(world) si vous avez des pistes merci !

Commentaire de naigeon le 25/05/2007 16:17:16

Salut,


Tu n'es pas hors sujet du tout ! Csanner le disque est la seule solution a ton problème.
Au moment d'empiler ou de dépiler les fichiers du disque dans la méthode GetAllFiles(String), tu as juste à tester si le fichier est un MP3 (test de l'extension) et si c'est un MP3, tu le met de côté, par exemple dans une StringCollection.

Commentaire de artpinze le 25/05/2007 21:58:26

merci de tes conseils mais c'est quoi la méthode get all files(string)et string collection
je ne cherche pas de lingerie feminine :):)

Commentaire de Octave32 le 03/06/2007 17:16:44

Où il y à la méthode simple en MSDOS :P

Dépose tout tes fichiers mp3s dans le même répertoire, positionne toi dessus MSDOS et écrit:
tree /f >> listemp3.doc

C'est rapide et efficace pour envoyer ta liste à un copain :P
Ça donne pas le .doc le plus prope, mais ça dépanne héhé.

Commentaire de Patrice99 le 04/06/2007 08:36:32

Merci pour l'astuce tree, il me semble que ça fait 20 ans que ça existe, mais j'avais oublié que c'était encore disponible !

Commentaire de artpinze le 04/06/2007 09:31:43

merci ! je vais essayer

Commentaire de artpinze le 04/06/2007 10:30:01

f corespond a quoi?
ca ne scanne que ma partition C/
que change t'on pour scanner un disque dur externe f/
ceci :F:\Documents a conserver\MP3>tree /f >>listemp3.doc

mais dans ce cas la ou vas le rapport?
quand j'essai la ligne ci dessus il me repond que F n'est pas reconnu en tant que commande interne ou externe

Commentaire de artpinze le 04/06/2007 10:41:35

C’est bon j’ai trouvé
F:\> listemp3.doc
je vous remercie  de votre aide  et a+

Commentaire de Octave32 le 04/06/2007 14:33:39

En faite /f devrait servir à afficher aussi le contenu des répertoires enfants, car moi par exemple je classe mes chansons par albums alors il faut qu'il m'affiche ce qu'il y à dans les dossiers des albums =)

Commentaire de angel_of_tower le 10/04/2009 15:46:47 8/10

merci pour cet source je ment suis servie pour réccupérer des fichiers
avec des extension choisies.
ex:
StreamWriter str;
string exi = "";
DriveAccess dra = new DriveAccess();
string [] les_fichiers ;
dra.GetAllFiles(disque[N_disque]);
les_fichiers = new string[dra.allFiles.Keys.Count];
dra.allFiles.Keys.CopyTo(les_fichiers,0);//Met tous les repertoire de l'unité dans Le_repertoires
try
{
  for (int n_fichier = 0; n_fichier < les_fichiers.Length; n_fichier++)
  {
    exi = Path.GetExtension(les_fichiers[n_fichier]);
    if (exi == "." + ext)
    {
        str.WriteLine(les_fichiers[n_fichier]);
    }
  }
}

catch (System.Exception ex)
{
}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Traitements de fichiers [ par Ninounette ] Bonjour &#224; tous,J'ai un programme qui redimensionne mes images et qui les affiche aussi. Lorsque je redimensionne une image avec ce prog, je souha Snapshot disque dur [ par hduchemin ] Bonjour, Quelqu'un pourrait il me donner un exemple de code pour faire un snapshot d'une partition ou d'un disque en entier ( type True Image ) ? D' copy de fichiers [ par catamenia ] Bonjour,J'aimerais copier une image qui se trouve sur le web afin de la mettre sur mon disque dure.J'ai essayé avec System.IO.File.copy mais il me dit chargement de grand fichiers image qui bloque la form [ par vboussema ] salu;j'ai un problème qui concerne le chargemen de grandes images (meme les petite :( )dans un picture boxen plus je ne sai pas comment faire pour uti Zipper des BLOB sans copier les fichiers temporairement sur le disque dur [ par denfer06 ] Bonjour,Je stocke dans ma base SQL des fichiers en tous genres et je voudrai lorsque j'en ressort plus d'un les zipper.je récupérer mes données de la Impossible d'afficher une image [ par arb ] BonsoirJe suis en train de reprendre une appli en C#, et je voudrais mettre une image. J'ai donc ajouté une pictureBox et choisi un logo.jpg comme ima Image cliquable dans un ListView [ par cybers7119 ] Salut à tous,Je doit manipuler un ListView qui, pour l'instant, n'a qu'une seule colonne (avec des "string" dedans).J'aimerais pouvoir sélectionner un [C#]treeview node image [ par medgha ] bonjour tout le monde,je dévelope en C# sous visual studio 2005 , j'utilise dans mon application un treeview que je charge à partir d'une base de donn [C#]TreeView ne pas associer à tt les nodes une image [ par medgha ] bonjour tt le monde,peut etre que ma question vous paraitra bête, mais j'ai cherché dans le forum et j'ai pas trouvé la reponse,mon problème est le su Créer en Cleaner en c# [ par eldaorn ] Bonjour à tous,Je débute dans la programmation et j'ai un petit projet en tête mais je manque de connaissance pour avancer.Je voudrais simplement crée


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales