Tunisiano


 
AccueilCalendrierFAQRechercherMembresGroupesS'enregistrerConnexion

Partagez | 
 

 Cool système de fichiers de classe avec le support des threads - Facile à utiliser

Aller en bas 
AuteurMessage
Admin
Directeur du Forum
Directeur du Forum
avatar

Masculin
Le nombre de contributions : 2211
points : 10133
Réputation : 0
Date d'Inscrit : 21/06/2009
Age : 27

MessageSujet: Cool système de fichiers de classe avec le support des threads - Facile à utiliser   Jeu Fév 24, 2011 6:53 am

Système de fichiers est une classe qui vous permettra de rapidement, facilement et efficacement obtenir le contenu d'un répertoire donné. Une classe de système de fichiers est un élément essentiel de toute la bibliothèque de code. Toute demande ne sorte de l'interaction du fichier, et si vous créez une classe qui permettent de gérer l'interaction entre votre application et le système de fichiers, puis il va rendre la vie un peu plus facile et vous n'aurez pas besoin de réinventer la roue d'une centaine de fois pour chaque projet. Ici, je vais essayer de fournir une telle classe que vous pouvez utiliser dans votre projet. Cet article est une extension d'un autre article (Automatisation de MS Excel 2003 en utilisant Visual Studio. NET), qui font tous deux partie du même projet. Toutefois, j'ai fait quelques modifications au code fourni ici que se rendre plus génériques.

Il ya donc deux sections de cet article, celui qui portera la classe FileSystem et l'autre qui portera sur l'application qui va utiliser la classe pour démontrer certaines de ses caractéristiques.

Contexte

Pas de fonds nécessaires, il suffit de se familiariser avec le langage C #, les discussions, et FileSystemObject.

En utilisant le code

Ici, je vais essayer de couvrir la classe FileSystem. Cette classe est très simple et évident. Il est également bien documentée. Mais passons sur elle en tout cas. Nous avons donc une classe nommée système de fichiers qui est utilisé pour faire des opérations du système de fichiers. Jetons un oeil à la classe:

FileSystem classe

Bon, nous avons plusieurs fichiers qui sont utilisés en interne par la classe. Six d'entre eux sont disponibles en tant que propriétés qui peut être consulté à l'exécution et quelques-uns sont fixés lors de l'initialisation, c'est à dire, et SourcePath destinationpath.

COPY_STATUS - est utilisé pour avertir le thread parent sur l'état du fil copie.

FILE_FILTER - est utilisé pour filtrer les types de fichiers. à savoir, *. xml, *. cs, *. xls, etc .. si elle n'est pas nulle, il se comportera comme *.*

NUMBER_OF_DIRECTORIES - retourne le nombre de répertoires dans la recherche.
retourne le nombre de fichiers dans la recherche - NUMBER_OF_FIELS.

Root_path - Obtient ou définit le chemin de la racine à utiliser pour la navigation.

STATUT - est l'état du thread principal de la classe FileSystem.

Vous pouvez également remarquer qu'il ya trois méthodes privées qui sont utilisées en interne par la classe. Deux de ces méthodes sont utilisées pour démarrer un thread particulier. Et le RecursiveDirectoryNavigation () est utilisée par le thread principal de la classe FileSystem faire la navigation, étant donné la RootPath.

Pour utiliser la méthode de copie de la classe que vous allez utiliser une des deux fonctions surchargées pour le constructeur, puis appelle la méthode CopyDirectory qui va déclencher l'startCopyThread pour effectuer l'opération. À partir de votre thread principal, vous pouvez utiliser la propriété COPY_STATUS pour vérifier sur le fil pour votre logique prochain programme le cas échéant.

Pour utiliser le code, vous n'avez besoin que de ce qui suit:

système de fichiers CoolFileSystem.FileSystem

= FileSystem (@ root);
C'est tout ce qu'il faut! Ci-dessous vous trouverez des extraits de code. Bien sûr, le code source complet est disponible pour téléchargement. Ci-dessous vous pouvez voir une partie de la source de la classe.

namespace CoolFileSystem
{

public class FileSystem

{

/ / Utilisé pour tenir le répertoire racine. Point de départ pour la recherche.

RootPath chaîne privée;

...

/ / Utilisé pour filtrer nom de fichier lors faire

/ / La recherche. Par défaut il est réglé sur "*. xls".

/ / Peut être changé en utilisant la propriété FILE_FILTER.

FileFilter private string = "*.*";

/ / Liste de fichiers est utilisé en interne. Il s'agit d'une liste

/ / De tous les fichiers trouvés compte tenu de la recherche

/ / Critères. S'adapte automatiquement. Taille par défaut 500.

privé fileList ArrayList = new ArrayList (500);

/ / Utilisé pour stocker des répertoires trouvés dans

/ / L'RootPath. Il contient des objets de type

/ / DirectoryStructure qui détiennent

/ / Les informations d'annuaire avec une liste de fichiers

/ / Dans le répertoire courant.

privé directoryList ArrayList = new ArrayList (500);

/ / Utilisé pour la navigation dans la structure de répertoire.

privé mainThread Thread;

...

...

public FileSystem (String path)

{

RootPath = chemin d'accès;

mainThread = new Thread (nouveau ThreadStart (StartThread));

mainThread.Start ();

}

StartThread private void ()

{

DirectoryInfo di = new DirectoryInfo (RootPath);

RecursiveDirectoryNavigation (di);

}

...

...

# Region NAVIGATION récursives de répertoires

[STAThread]

RecursiveDirectoryNavigation private void (DirectoryInfo di)

{

essayer

{

/ / Ajouter le répertoire courant à la liste des répertoires

ds = DirectoryStructure DirectoryStructure new ();

ds.di = di;

insertionIndex int = 0;

/ / Let's get fichiers dans le répertoire

foreach (FileInfo fi di.GetFiles dans (FileFilter))

{

fileList.Insert (insertionIndex, fi);

ds.fileList.Insert (insertionIndex, fi);

}

directoryList.Add (ds);

foreach (d DirectoryInfo en di.GetDirectories ())

{

RecursiveDirectoryNavigation (d);

}

}

catch {}

finally {}

}

# Endregion

public ArrayList GetFiles ()

{

fileList retour;

}

public GetDirectories ArrayList ()

{

directoryList retour;

}

public string GetNumOfFilesCopied ()

{

copyNumofFiles.ToString return ();

}

}

...
Donc, à partir de code ci-dessus, vous obtenez un aperçu de la classe. Le code est bien documenté je ne vais pas entrer dans les détails.

Dans la section suivante, je vais vous montrer comment la classe est utilisée dans le code principal ou le conducteur. Dans ce cas, j'ai créé une application Windows qui a un bouton, et de certaines étiquettes qui indiquent l'état de la classe. Lorsque le bouton est cliqué, vous obtenez le FolderBrowseDialog qui vous permet de sélectionner une racine, une fois que vous sélectionnez une racine valide, vous recevrez les résultats.

DriverCoolFileSystem classe

D'accord, donc la classe du pilote est utilisé pour démontrer certaines des fonctionnalités de la classe FileSystem. Les méthodes que vous devriez regarder en sont les suivantes:

butRootDirectory_Click - cette fonction permet à l'utilisateur de sélectionner le répertoire racine pour la navigation.
timer_Tick - est utilisé par le conducteur pour vérifier la classe FileSystem.
ListDirectories - est utilisée pour remplir l'arborescence.
Lorsque vous exécutez le programme, et cliquez sur Sélectionner le répertoire racine, vous obtenez une boîte de dialogue qui vous permettra de parcourir la structure de répertoire. Lorsque vous effectuez une sélection, un objet système de fichiers est créé et le chemin complet est envoyé dans le constructeur. Une temporisation est lancée, qui vérifie l'état de l'objet FileSystem. La prochaine étape est de mettre à jour l'interface utilisateur.

namespace CoolFileSystem
{

/ / /

/ / / Pilote pour CoolFileSystem

/ / /

DriverCoolFileSystem public class: System.Windows.Forms.Form

{

/ / Variable pour déclarer CoolFileSystem

système de fichiers privés CoolFileSystem.FileSystem = null;

...

DriverCoolFileSystem publique ()

{

InitializeComponent ();

}

...

butRootDirectory_Click private void (object sender, System.EventArgs e)

{

FolderBrowserDialog FolderBrowserDialog = FolderBrowserDialog new ();

résultat = DialogResult folderBrowserDialog.ShowDialog ();

if (result == DialogResult.OK)

{

if (this.fileSystem == null)

{

this.fileSystem =

Nouveau système de fichiers (folderBrowserDialog.SelectedPath @);

timer.Start ();

}

d'autre

{

MessageBox.Show ("Fichier en cours d'exécution Sys ...");

}

}

}

timer_Tick private void (object sender, System.EventArgs e)

{

this.lblDirectories.Text = "Num des répertoires:"

this.fileSystem.NUMBER_OF_DIRECTORIES;

this.lblFiles.Text = "Num de fichiers:"

this.fileSystem.NUMBER_OF_FILES;

"Status:" this.lblStatus.Text = this.fileSystem.STATUS;

if (this.fileSystem.STATUS.Equals ("arrêté"))

{

"Status:" this.lblStatus.Text = this.fileSystem.STATUS;

timer.Stop ();

/ / Remplir l'arborescence

listFolders Thread =

Thread (nouveaux ThreadStart (ListDirectories));

treeView.Nodes.Clear ();

listFolders.Start ();

}

}

ListDirectories private void ()

{

ArrayList directoryList this.fileSystem.GetDirectories = ();

foreach (ds DirectoryStructure dans directoryList)

{

if (ds.fileList.Count> 0)

{

dossier = TreeNode TreeNode nouvelles (ds.di.Name.ToString ());

foreach (FileInfo fi ds.fileList)

{

fichier = new TreeNode TreeNode (fi.FullName);

folder.Nodes.Add (fichier);

}

/ Karamian Vahe / - 03/01/2005 - Il s'agit de Sécurité des threads

if (treeView.InvokeRequired == true)

{

/ / Vérifier si nous en cours d'exécution dans le même fil

treeView.Invoke (nouveau AddToTreeView (treeView.Nodes.Add),

new object [] {dossier});

}

d'autre

{

treeView.Nodes.Add (dossier);

}

}

}

this.fileSystem = null;

}

}
}
Si vous remarquez, il ya une minuterie qui est configuré pour vérifier l'état du fil du système de fichiers à chaque seconde. Encore une fois, le code est simple et je ne vais pas entrer dans les détails. J'espère que cet exemple de code donne encore une approche différente de faire de navigation du système de fichiers.

Points d'Intérêt

La classe est très flexible et vous pouvez facilement l'étendre et l'utiliser dans vos propres programmes. L'une des caractéristiques que j'ai retiré de la version actuelle pour CodeProject est la capacité de recherche pour le même type de fichiers et d'obtenir la plus récente pour le traitement. Il ya quelques ajustements mineurs, vous devrez faire pour obtenir la fonctionnalité. Ce que je fournis ici est une base de code général qui peut être utilisé par tout le monde.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://ton-monde.info
 
Cool système de fichiers de classe avec le support des threads - Facile à utiliser
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Tunisiano :: Informatique :: Types de fichiers-
Sauter vers: