Accueil > > > SNAPSHOT DISQUE DUR
SNAPSHOT DISQUE DUR
Information sur la source
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
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Traitements de fichiers [ par Ninounette ]
Bonjour à 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
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|