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
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|