[.NET2] REPRÉSENTATION GRAPHIQUE DES CLUSTERS D'UN VOLUME
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 2008
-
1 mars 2006 à 23:48
Profil bloqué -
3 déc. 2006 à 23:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bravo Willi pour ce code
Je me suis servi de l'idée pour les feuilles Tableclustntfs et Tableclustfat du projet "Acces Direct Disque"
Allez 10/10 et c'est mérité
Merci
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 24 nov. 2006 à 23:23
Salut,
bon exemple d'application du ControlCode FSCTL_GET_VOLUME_BITMAP. Je suis peu habitué au *.Net, mais çà peut m'être utile pour coder en VB6 ;)
Pour le code, c'est identé, commenté, propre, çà remplit très bien la fonction demandée, donc je note 10 (même si je ne peux apprécier toutes les subtilités du *.Net)
@+ et bonne prog.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 21 avril 2006 à 08:26
Oui mais la c'est une autre histoire :)
Je me pencherais dessus à l'occasion
VBSorcier
Messages postés102Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention29 avril 2007 20 avril 2006 à 22:00
Bravo !(9/10)
Avant de faire une appli de defrag (ou en meme temps), serai-ce possible de faire comme le défragmenteur d'XP, c'est à dir mettre en rouge les fichiers fragmentés (et eventuellement en vert le fichier swap) ?
De toute façon il faudra bien que tu differencie les clusters des fichiers fragmenté et des autres pour pouvoir defragementer :p
a+
VBSorcier
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 6 mars 2006 à 15:35
Merci Dalida et Eldim :)
Pour une appli de défrag je pense que sa va venir dans mes prochaines sources...
J'attend juste un livre sur les api non documentées de microsoft. J'ai déjà la base avec la fonction GetMapVolume pour avoir la position des clusters.
En attendant amuses-toi bien avec cette source :)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 6 mars 2006 à 13:49
Bien vu Dalida !
ça marche très bien
Dalida
Messages postés6728Date d'inscriptionmardi 14 mai 2002StatutContributeurDernière intervention11 janvier 2016 6 mars 2006 à 13:31
salut,
bravo Willi ça tourne joliment et ce n'est pas s'en me rappeler DiskKeeper...
ton code me semble une excellente base de travail pour coder une appli de défrag !
d'autant qu'il y a encore plein de possibilités !
je l'ai déjà modifié en ne mettant que les disques fixes et en affichant le nom du volume. mais aussi en mettant à profit la proposition de ELDIM (lecteur du system sélectionné par défaut.
Dim index As Integer = -1
For Each drive As DriveInfo In My.Computer.FileSystem.Drives
If drive.DriveType = DriveType.Fixed Then
index = cmbDrive.Items.Add(String.Format("{0} ({1})", drive.VolumeLabel, drive.Name))
If drive.Name.StartsWith(System.Environment.SystemDirectory.Substring(0, 1)) = True Then
cmbDrive.SelectedIndex = index
End If
End If
Next
je n'ai pas encore lu la classe graphique mais à la vue des commentaires précédents je suis confiant.
(et allez le deuxième 9/10 de la journée ! sur trois sources chargées c'est un excellent début de semaine !)
[Dalida]
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 2 mars 2006 à 11:14
Ah ok
Chez moi ça seléctionne le D: lol
car mon portable n'a pas de lecteur de disquete...
sinon tu peux sélectionner le drive du sysdir c'est plus sur...
ou mieux ne sélectionner que les disques durs...
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 2 mars 2006 à 11:03
Eldim -> non non ce n'est pas une erreur j'ai mis index=1 pour selectionner le lecteur c: directement.
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 2 mars 2006 à 10:54
Ben dans la combo tu as mis selecteditem=1 (ou un truc du genre je sais plus)
or il faut mettre 0 c'est tout... c'est un petit rien
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 2 mars 2006 à 10:38
Eldim je ne vois pas ou est le problème avec le combo....
Sinon de distinguer les fichiers en cours d'utilisation la honnetement j'en sais vraiment rien...question à étudier :)
Fragag effectivement c'est plus rapide que choose.
J'ai fait des test sur le meme volume et chronométrer avec la classe stopwatch le temps d'execution de Drawmap.
Avec Choose j'obtiens 56 millisecondes alors qu'avec ta méthode j'obtiens 35 millisecondes.
Merci Fragag pour cette amélioration de perf.
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 2 mars 2006 à 08:45
Y a juste un légé bug : la combo commence à 0 pas à 1... (dans le load form)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 2 mars 2006 à 08:43
Bonjour,
Super source j'ai mis 10
petite question comme ça :
serait-il possible de visualiser les fichiers en cours d'utilisation en rouge ?
cs_FraGag
Messages postés81Date d'inscriptionjeudi 19 février 2004StatutMembreDernière intervention18 avril 2008 2 mars 2006 à 05:44
J'ai regardé rapidement et j'ai vu la fonction GetBit()... J'aurais plutôt fait, au lieu de Choose(bit, 1, 2, ...), 2 ^ bit ; dans ce dernier cas, il faut remplacer la boucle dans DrawMap() avec la variable curBit pour qu'elle prenne des valeurs de 0 à 7 et non de 1 à 8. Je ne sais pas par contre quelle méthode est la plus rapide.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 2 mars 2006 à 00:16
Merci Econs pour cette brève explication,
J'ai un peu pataugé avec l'utilisation des fonctions graphiques et le mixage de 2 couleurs....
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 1 mars 2006 à 23:48
Salut,
Ta fonction MixColors avait effectivement un petit souci.
Le passage par ColorTranslator.ToOle est inutile (et source d'erreur en plus).
Tu transformais le Rouge dans un format que FromArgb() ne savait pas lire. Et donc FromArgb renvoyait du bleu.
En paramètre de MixColors, tu plaçais des données sortant de toArbg(). Donc pour les utiliser, une seule transformation suffit : un passage à travers FromArgb().
Il est 23h50, si je ne suis pas clair, je réexpliquerai çà demain, après un bon dodo.
Voici le code résultat en tous cas :
Private Function MixColors(ByVal color1 As Integer, ByVal color2 As Integer, ByVal opacity As Decimal) As Integer
Dim Red1, Green1, Blue1 As Byte
Dim Red2, Green2, Blue2 As Byte
'Dim col1 As Integer = ColorTranslator.ToOle(Color.FromArgb(color1))
'Dim col2 As Integer = ColorTranslator.ToOle(Color.FromArgb(color2))
'Sépare les couleurs de color1
Red1 = Color.FromArgb(color1).R
Green1 = Color.FromArgb(color1).G
Blue1 = Color.FromArgb(color1).B
'Sépare les couleurs de color2
Red2 = Color.FromArgb(color2).R
Green2 = Color.FromArgb(color2).G
Blue2 = Color.FromArgb(color2).B
'Donne la nouvelle couleur... :D
Dim mixCol As Integer = Color.FromArgb((Red1 * opacity + Red2 * (1 - opacity)), (Green1 * opacity + Green2 * (1 - opacity)), (Blue1 * opacity + Blue2 * (1 - opacity))).ToArgb
3 déc. 2006 à 23:03
Je me suis servi de l'idée pour les feuilles Tableclustntfs et Tableclustfat du projet "Acces Direct Disque"
Allez 10/10 et c'est mérité
Merci
24 nov. 2006 à 23:23
bon exemple d'application du ControlCode FSCTL_GET_VOLUME_BITMAP. Je suis peu habitué au *.Net, mais çà peut m'être utile pour coder en VB6 ;)
Pour le code, c'est identé, commenté, propre, çà remplit très bien la fonction demandée, donc je note 10 (même si je ne peux apprécier toutes les subtilités du *.Net)
@+ et bonne prog.
21 avril 2006 à 08:26
Je me pencherais dessus à l'occasion
20 avril 2006 à 22:00
Avant de faire une appli de defrag (ou en meme temps), serai-ce possible de faire comme le défragmenteur d'XP, c'est à dir mettre en rouge les fichiers fragmentés (et eventuellement en vert le fichier swap) ?
De toute façon il faudra bien que tu differencie les clusters des fichiers fragmenté et des autres pour pouvoir defragementer :p
a+
VBSorcier
6 mars 2006 à 15:35
Pour une appli de défrag je pense que sa va venir dans mes prochaines sources...
J'attend juste un livre sur les api non documentées de microsoft. J'ai déjà la base avec la fonction GetMapVolume pour avoir la position des clusters.
En attendant amuses-toi bien avec cette source :)
6 mars 2006 à 13:49
ça marche très bien
6 mars 2006 à 13:31
bravo Willi ça tourne joliment et ce n'est pas s'en me rappeler DiskKeeper...
ton code me semble une excellente base de travail pour coder une appli de défrag !
d'autant qu'il y a encore plein de possibilités !
je l'ai déjà modifié en ne mettant que les disques fixes et en affichant le nom du volume. mais aussi en mettant à profit la proposition de ELDIM (lecteur du system sélectionné par défaut.
Dim index As Integer = -1
For Each drive As DriveInfo In My.Computer.FileSystem.Drives
If drive.DriveType = DriveType.Fixed Then
index = cmbDrive.Items.Add(String.Format("{0} ({1})", drive.VolumeLabel, drive.Name))
If drive.Name.StartsWith(System.Environment.SystemDirectory.Substring(0, 1)) = True Then
cmbDrive.SelectedIndex = index
End If
End If
Next
je n'ai pas encore lu la classe graphique mais à la vue des commentaires précédents je suis confiant.
(et allez le deuxième 9/10 de la journée ! sur trois sources chargées c'est un excellent début de semaine !)
[Dalida]
2 mars 2006 à 11:14
Chez moi ça seléctionne le D: lol
car mon portable n'a pas de lecteur de disquete...
sinon tu peux sélectionner le drive du sysdir c'est plus sur...
ou mieux ne sélectionner que les disques durs...
2 mars 2006 à 11:03
2 mars 2006 à 10:54
or il faut mettre 0 c'est tout... c'est un petit rien
2 mars 2006 à 10:38
Sinon de distinguer les fichiers en cours d'utilisation la honnetement j'en sais vraiment rien...question à étudier :)
Fragag effectivement c'est plus rapide que choose.
J'ai fait des test sur le meme volume et chronométrer avec la classe stopwatch le temps d'execution de Drawmap.
Avec Choose j'obtiens 56 millisecondes alors qu'avec ta méthode j'obtiens 35 millisecondes.
Merci Fragag pour cette amélioration de perf.
2 mars 2006 à 08:45
2 mars 2006 à 08:43
Super source j'ai mis 10
petite question comme ça :
serait-il possible de visualiser les fichiers en cours d'utilisation en rouge ?
2 mars 2006 à 05:44
2 ^ 0 = 1
2 ^ 1 = 2
2 ^ 2 = 4
2 ^ 3 = 8
2 ^ 4 = 16 ...
2 mars 2006 à 00:16
J'ai un peu pataugé avec l'utilisation des fonctions graphiques et le mixage de 2 couleurs....
1 mars 2006 à 23:48
Ta fonction MixColors avait effectivement un petit souci.
Le passage par ColorTranslator.ToOle est inutile (et source d'erreur en plus).
Tu transformais le Rouge dans un format que FromArgb() ne savait pas lire. Et donc FromArgb renvoyait du bleu.
En paramètre de MixColors, tu plaçais des données sortant de toArbg(). Donc pour les utiliser, une seule transformation suffit : un passage à travers FromArgb().
Il est 23h50, si je ne suis pas clair, je réexpliquerai çà demain, après un bon dodo.
Voici le code résultat en tous cas :
Private Function MixColors(ByVal color1 As Integer, ByVal color2 As Integer, ByVal opacity As Decimal) As Integer
Dim Red1, Green1, Blue1 As Byte
Dim Red2, Green2, Blue2 As Byte
'Dim col1 As Integer = ColorTranslator.ToOle(Color.FromArgb(color1))
'Dim col2 As Integer = ColorTranslator.ToOle(Color.FromArgb(color2))
'Sépare les couleurs de color1
Red1 = Color.FromArgb(color1).R
Green1 = Color.FromArgb(color1).G
Blue1 = Color.FromArgb(color1).B
'Sépare les couleurs de color2
Red2 = Color.FromArgb(color2).R
Green2 = Color.FromArgb(color2).G
Blue2 = Color.FromArgb(color2).B
'Donne la nouvelle couleur... :D
Dim mixCol As Integer = Color.FromArgb((Red1 * opacity + Red2 * (1 - opacity)), (Green1 * opacity + Green2 * (1 - opacity)), (Blue1 * opacity + Blue2 * (1 - opacity))).ToArgb
Return mixCol
End Function