|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|