BrolFileStatsControl.cs

Description du code

BrolFileStatsControl.cs est un fichier du projet BrolFileStats.
Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/brolfilestats/.

Projet BrolFileStats :

Statistiques en CSharp.

Code source ou contenu du fichier

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO;
  9. using be.gaudry.explorer.filestats.model;
  10. using be.gaudry.model.enums;
  11. using be.gaudry.view;
  12. using be.gaudry.events;
  13. using be.gaudry.model;
  14.  
  15. namespace be.gaudry.explorer.filestats.view.controls
  16. {
  17. public partial class BrolFileStatsControl : UserControl
  18. {
  19. #region declarations and constructors
  20. private FileStatsParser fileParser;
  21. private Stat stat;
  22. private string startProcessStr, stopProcessStr;
  23.  
  24. public BrolFileStatsControl()
  25. {
  26. fileParser = new FileStatsParser();
  27. stat = new Stat();
  28. startProcessStr = "Actualiser";
  29. stopProcessStr = "Arrêter";
  30.  
  31. InitializeComponent();
  32.  
  33. //setStartBtn(false);
  34. startParseBtn.Text = startProcessStr;
  35. progressGB.Dock = DockStyle.Fill;
  36. startPathLbl.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  37. initStatsTypeCB();
  38. initNbResultsToDisplayCB();
  39. }
  40.  
  41. private void initNbResultsToDisplayCB()
  42. {
  43. nbResultsToDisplayCB.Items.Add("Tous");
  44. nbResultsToDisplayCB.Items.Add(5);
  45. nbResultsToDisplayCB.Items.Add(10);
  46. nbResultsToDisplayCB.Items.Add(15);
  47. nbResultsToDisplayCB.SelectedIndex = 0;
  48. }
  49.  
  50. private void initStatsTypeCB()
  51. {
  52. statsTypeCB.DataSource = EnumHelper.ToList(typeof(FILE_SEARCHTYPE));
  53. statsTypeCB.DisplayMember = "Value";
  54. statsTypeCB.ValueMember = "Key";
  55.  
  56. statsTypeCB.SelectedValue = FILE_SEARCHTYPE.DirSize;
  57. setSearchType((FILE_SEARCHTYPE)statsTypeCB.SelectedValue);
  58. }
  59. #endregion
  60.  
  61. #region display and set parameters
  62.  
  63. public void addContextMenuItems(ContextMenu menu)
  64. {
  65. /*
  66.   //menu.MenuItems.Add(ToolStripSeparator);
  67.   menu.MenuItems. Add(searchInSubDirsTsMi);
  68.   menu.MenuItems.Add(searchInHiddenFilesTsMi);
  69.   menu.MenuItems.Add(searchInSystemFilesTsMi);
  70.   menu.MenuItems.Add(searchKeySensitiveTsMi);
  71.   menu.MenuItems.Add(searchTypeTsCB);
  72.   //menu.MenuItems.Add(ToolStripSeparator);
  73.   menu.MenuItems.Add(displayChartTsMi);
  74.   menu.MenuItems.Add(displayDGVTsMi);
  75.   menu.MenuItems.Add(displaySearchOptionsTsMi);
  76.   menu.MenuItems.Add(displayTop10TsMi);
  77.   * */
  78. }
  79.  
  80. public void setStartPath(string currentDirPath)
  81. {
  82. startPathLbl.Text = currentDirPath;
  83. }
  84. public void parse(string currentDirPath)
  85. {
  86. startPathLbl.Text = currentDirPath;
  87. search();
  88. }
  89. private void setStartBtn(bool started)
  90. {
  91. if(started)
  92. {
  93. startParseBtn.Text = stopProcessStr;
  94. startParseBtn.Image = global::be.gaudry.explorer.filestats.Properties.Resources.stopProcess;
  95. }
  96. else
  97. {
  98. startParseBtn.Text = startProcessStr;
  99. startParseBtn.Image = global::be.gaudry.explorer.filestats.Properties.Resources.startProcess;
  100. }
  101. startParseBtn.ImageAlign = ContentAlignment.MiddleRight;
  102. startParseBtn.TextAlign = ContentAlignment.MiddleLeft;
  103. startParseBtn.TextImageRelation = TextImageRelation.TextBeforeImage;
  104. startParseBtn.AutoSize = true;
  105. }
  106. private void browseStartPathBtn_Click(object sender, EventArgs e)
  107. {
  108. FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
  109. folderBrowserDialog.SelectedPath = startPathLbl.Text;
  110. folderBrowserDialog.Description = "Sélectionnez le répertoire dans lequel se trouve les fichiers à renommer...";
  111. folderBrowserDialog.ShowNewFolderButton = false;
  112.  
  113.  
  114. if (DialogResult.OK == folderBrowserDialog.ShowDialog())
  115. {
  116. startPathLbl.Text = folderBrowserDialog.SelectedPath;
  117. }
  118. }
  119.  
  120. private void statsTypeCB_SelectionChangeCommitted(object sender, EventArgs e)
  121. {
  122. FILE_SEARCHTYPE searchType = (FILE_SEARCHTYPE)EnumHelper.getEnum(statsTypeCB.SelectedItem);
  123. setSearchType(searchType);
  124. search();
  125. }
  126.  
  127. private void setSearchType(FILE_SEARCHTYPE searchType)
  128. {
  129. fileParser.SearchType = searchType;
  130. chartControl.FormatString -= this.formatPathString;
  131. chartControl.FormatValue -= this.formatDirectoryLength;
  132. keySensitiveChkB.Visible = false;
  133. switch (searchType)
  134. {
  135. case FILE_SEARCHTYPE.Extension:
  136. stat.LabelFormat = "{0:0.0%} des fichiers ({1}) pour l'extension \"{2}\"";
  137. chartControl.Title = "Répartition des fichiers par extensions.";
  138. chartControl.setColumnTitle(1, "Extension");
  139.  
  140. keySensitiveChkB.Visible = true;
  141. chartControl.FormatString += this.formatPathString;
  142. break;
  143. case FILE_SEARCHTYPE.Count:
  144. stat.LabelFormat = "{0:0.0%} de fichiers ({1}) pour le répertoire {2}";
  145. chartControl.Title = "Répartition par nombre de fichiers.";
  146. chartControl.setColumnTitle(1, "Répertoire");
  147.  
  148. chartControl.FormatString += this.formatPathString;
  149. break;
  150. case FILE_SEARCHTYPE.FileSize:
  151. stat.LabelFormat = "{0:0.0%} de la taille pour le fichier {2} ({1} octets)";
  152. chartControl.Title = "Répartition par taille de fichiers.";
  153. chartControl.setColumnTitle(1, "Fichier");
  154.  
  155. chartControl.FormatString += this.formatPathString;
  156. chartControl.FormatValue += this.formatDirectoryLength;
  157. break;
  158. case FILE_SEARCHTYPE.DirSize:
  159. stat.LabelFormat = "{0:0.0%} de la taille totale ({1} octets) pour le répertoire {2}";
  160. chartControl.Title = "Répartition par taille de répertoires.";
  161. chartControl.setColumnTitle(1, "Répertoire");
  162.  
  163. chartControl.FormatString += this.formatPathString;
  164. chartControl.FormatValue += this.formatDirectoryLength;
  165. break;
  166. case FILE_SEARCHTYPE.LastAccess:
  167. stat.LabelFormat = "{0:0.0%} de fichiers ({1}) accédés {2}";
  168. chartControl.Title = "Répartition des fichiers par date d'accès.";
  169. chartControl.setColumnTitle(1, "Dernier accès");
  170. break;
  171. case FILE_SEARCHTYPE.Attribute:
  172. stat.LabelFormat = "{0:0.0%}({1} fichiers avec l'attribut {2})";
  173. chartControl.Title = "Répartition des fichiers par attributs.";
  174. chartControl.setColumnTitle(1, "Attribut");
  175. break;
  176. default:
  177. chartControl.Title = "";
  178. chartControl.setColumnTitle(1, "");
  179. break;
  180. }
  181. }
  182.  
  183. #endregion
  184.  
  185. #region chart format events
  186.  
  187. private string formatPathString(string stringToFormat)
  188. {
  189. return stringToFormat.Substring(stringToFormat.LastIndexOf(Path.DirectorySeparatorChar)+1);
  190. }
  191.  
  192. private string formatDirectoryLength(double value)
  193. {
  194. return Units.getLengthString((long)value);
  195. }
  196.  
  197. #endregion
  198.  
  199. #region search
  200.  
  201. private void search()
  202. {
  203. if (startParseBtn.Text.Equals(startProcessStr))
  204. {
  205. setStartBtn(true);
  206. startSearch();
  207. }
  208. else
  209. {
  210. mediaBrowserBgWorker.CancelAsync();
  211. setStartBtn(false);
  212. //browsePgB.ParameterValue = 0;
  213. }
  214. }
  215.  
  216. private void startSearch()
  217. {
  218. String error = null;
  219.  
  220. String startPath = startPathLbl.Text;
  221.  
  222. if (!Directory.Exists(startPath))
  223. {
  224. error = String.Format("\n{0} n'est pas un chemin valide.", startPath);
  225. }
  226. else
  227. {
  228. setStartBtn(true);
  229. if (mediaBrowserBgWorker.IsBusy)
  230. {
  231. error = "Impossible de lancer le traitement car un traitement est déjà en cours...";
  232. }
  233. else
  234. {
  235. fileParser.FirstLevel = onlyFirstSubDirsChkB.Checked;
  236. fileParser.StartPath = startPath;
  237. fileParser.IncludeSubFolders = includeSubDirChkB.Checked;
  238. fileParser.IncludeHiddenFiles = includeHiddenFilesChkB.Checked;
  239. fileParser.PreCalcProgress = false;
  240. displayProgressGB();
  241. stat.clear();
  242. fileParser.KeySensitive = keySensitiveChkB.Checked;
  243. fileParser.Stat = stat;
  244. mediaBrowserBgWorker.RunWorkerAsync();
  245. }
  246. }
  247.  
  248. if (error != null)
  249. {
  250. MessageBox.Show(
  251. this,
  252. error,
  253. "Impossible de démarrer le traitement",
  254. MessageBoxButtons.OK,
  255. MessageBoxIcon.Stop
  256. );
  257. }
  258. }
  259. #endregion
  260.  
  261. #region progress methods
  262.  
  263. private void displayProgressGB()
  264. {
  265. browsePgB.Value = 0;
  266. browsePgB.Style = ProgressBarStyle.Marquee;
  267. curDirValLbl.Text = "";
  268. progressGB.Visible = true;
  269. }
  270.  
  271. /// <summary>
  272. /// Reinit the progress max value
  273. /// (this value depends of the quantity of files into the directory to scan)
  274. /// </summary>
  275. /// <param name="sender"></param>
  276. /// <param name="e"></param>
  277. private void reinitProgressMaxValue(object sender, EventArgs e)
  278. {
  279. searchResultsLbl.Visible = false;
  280. }
  281.  
  282. /// <summary>
  283. /// Start asynchroneous search
  284. /// </summary>
  285. /// <remarks>
  286. /// In this method, do not modify any graphic component
  287. /// </remarks>
  288. /// <param name="sender"></param>
  289. /// <param name="e"></param>
  290. private void mediaBrowserBgWorker_DoWork(object sender, DoWorkEventArgs e)
  291. {
  292. BackgroundWorker bgw = sender as BackgroundWorker;
  293. // Call the model asynchroneous search
  294. e.Result = fileParser.parse(bgw, e);
  295. }
  296.  
  297. /// <summary>
  298. /// Display results throws by the search
  299. /// </summary>
  300. /// <remarks>
  301. /// The graphic components may here react at the results
  302. /// </remarks>
  303. /// <param name="sender"></param>
  304. /// <param name="e"></param>
  305. private void mediaBrowserBgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
  306. {
  307. switch (e.ProgressPercentage)
  308. {
  309. case (int)BGWORKER.currentInfo:
  310. {
  311. String s = e.UserState as String;
  312. if (s != null) curDirValLbl.Text = s;
  313. break;
  314. }
  315. case (int)BGWORKER.progressBarStyle_Block:
  316. {
  317. browsePgB.Style = ProgressBarStyle.Blocks;
  318. break;
  319. }
  320. default:
  321. {
  322. if (e.ProgressPercentage > 0)
  323. {
  324. browsePgB.Value = e.ProgressPercentage;
  325. }
  326. break;
  327. }
  328. }
  329. }
  330. /*
  331.   private void increaseDirSize(FileInfo fi, ProgressChangedEventArgs e)
  332.   {
  333.   if (!stat.Dictionary.ContainsKey(fi.DirectoryName))
  334.   {
  335.   double size = (double)BrolFile.getDirectoryLength(mediaBrowserBgWorker, e, fi.Directory, true);
  336.   stat.increase(fi.DirectoryName, size);
  337.   }
  338.   }*/
  339.  
  340. private void mediaBrowserBgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  341. {
  342. setStartBtn(false);
  343. browsePgB.Value = 0;
  344. /*try
  345.   {
  346.   if (e.Result != null)
  347.   {
  348.   previousMaxResult = (float)e.Result;
  349.   }
  350.   }
  351.   catch (System.Reflection.TargetInvocationException) { }*/
  352. if (e.Error != null)
  353. {
  354. searchResultsLbl.Text = "Erreur : " + e.Error.Message;
  355. }
  356. else if (e.Cancelled)
  357. {
  358. searchResultsLbl.Text = "La recherche a été stoppée avant sa fin... Tous les résultats ne sont pas présents.";
  359. }
  360. else
  361. {
  362. //string columnTitle, chartTitle;
  363. try
  364. {
  365. chartControl.TopCountToDisplay = (int)nbResultsToDisplayCB.SelectedItem;
  366. }
  367. catch
  368. {
  369. chartControl.TopCountToDisplay = 0;
  370. }
  371. chartControl.setBrolChart(stat/*, chartTitle, columnTitle*/);
  372. chartControl.Visible = true;
  373. searchResultsLbl.Text = String.Format("Taille du répertoire : {0}", Units.getLengthString((long)e.Result));
  374. }
  375. progressGB.Visible = false;
  376. }
  377. #endregion
  378.  
  379. #region display and search options
  380. private void includeHiddenFilesChkB_Click(object sender, EventArgs e)
  381. {
  382. searchInHiddenFilesTsMi.Checked = includeHiddenFilesChkB.Checked;
  383. }
  384. private void includeHiddenFilesTsMi_Click(object sender, EventArgs e)
  385. {
  386. includeHiddenFilesChkB.Checked = searchInHiddenFilesTsMi.Checked;
  387. }
  388.  
  389. private void includeSystemFilesChkB_Click(object sender, EventArgs e)
  390. {
  391. searchInSystemFilesTsMi.Checked = includeSystemFilesChkB.Checked;
  392. }
  393. private void searchInSystemFilesTsMi_Click(object sender, EventArgs e)
  394. {
  395. includeSystemFilesChkB.Checked = searchInSystemFilesTsMi.Checked;
  396. }
  397.  
  398. private void includeSubDirChkB_Click(object sender, EventArgs e)
  399. {
  400. searchInSubDirsTsMi.Checked = includeSubDirChkB.Checked;
  401.  
  402. }
  403. private void searchInSubDirsTsMi_Click(object sender, EventArgs e)
  404. {
  405. includeSubDirChkB.Checked = searchInSubDirsTsMi.Checked;
  406. }
  407.  
  408. private void displaySearchOptionsTsMi_Click(object sender, EventArgs e)
  409. {
  410. this.contentTLP.RowStyles[0].Height = (displaySearchOptionsTsMi.Checked) ? 200F : 0F;
  411. }
  412.  
  413. private void nbResultsToDisplayCB_SelectionChangeCommitted(object sender, EventArgs e)
  414. {
  415. if (this.Visible)
  416. {
  417. try
  418. {
  419. chartControl.TopCountToDisplay = (int)nbResultsToDisplayCB.SelectedItem;
  420. Console.WriteLine("nb items to display : " + chartControl.TopCountToDisplay);
  421. }
  422. catch
  423. {
  424. chartControl.TopCountToDisplay = 0;
  425. }
  426. chartControl.setBrolChart(stat/*, chartTitle, columnTitle*/);
  427. }
  428. }
  429. #endregion
  430.  
  431. private void BrolFileStatsControl_Load(object sender, EventArgs e)
  432. {
  433. startParseBtn.Text = startProcessStr;
  434. }
  435.  
  436. private void startParseBtn_Click(object sender, EventArgs e)
  437. {
  438. search();
  439. }
  440. }
  441. }

Structure et Fichiers du projet

Afficher/masquer...


Répertoires contenus dans /var/www/bin/sniplets/bibliobrol/brolfilestats/view/controls/ 
IcôneNomTailleModification
Pas de sous-répertoires.
IcôneNomTailleModification
| _ Répertoire parent0 octets1727093662 23/09/2024 14:14:22
Fichiers contenus dans /var/www/bin/sniplets/bibliobrol/brolfilestats/view/controls/ 
IcôneNomTailleModificationAction
IcôneNomTailleModificationAction
Afficher le fichier .cs|.csBrolFileStatsControl.Designer.cs29.63 Ko31/10/2018 18:32:51-refusé-
Afficher le fichier .cs|.csBrolFileStatsControl.cs16.19 Ko31/10/2018 18:32:51-refusé-
Afficher le fichier .resx|.resxBrolFileStatsControl.resx6.26 Ko31/10/2018 18:32:51-refusé-

Utilisation de l'explorateur de code

  • Navigation :
    • Un clic sur une icône de répertoire ouvre ce répertoire pour en afficher les fichiers.
    • Lorsque le répertoire en cours ne contient pas de sous-répertoires il est possible de remonter vers le répertoire parent.
    • La structure de répertoires en treetable (tableau en forme d'arborescence) n'est plus possibledans cette version.
    • Un clic sur une icône de fichier ouvre ce fichier pour en afficher le code avec la coloration syntaxique adaptée en fonction du langage principal utilisé dans le fichier.
  • Affichage :
    • Il est possible de trier les répertoires ou les fichiers selon certains critères (nom, taille, date).
  • Actions :
    • Les actions possible sur les fichiers dépendent de vos droits d'utilisateur sur le site. Veuillez activer le mode utilisateur pour activer les actions.

Document créé le 30/10/2009, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/cs-brolfilestats-source-rf-view/controls/BrolFileStatsControl.cs.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.