FICHIERS_CACHÉS_LECTURE_SEULE

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 29 janv. 2010 à 13:35
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 29 janv. 2010 à 16:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51203-fichiers-caches-lecture-seule

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
29 janv. 2010 à 16:16
Merci à tout les 2 pour vos commentaires très constructifs.
Pour la ligne:
If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then, j'ai pris l'exemple dans :
http://msdn.microsoft.com/en-us/library/system.io.file.setattributes.aspx.
Je vais donc essayer de suivre vos précieux conseils pour améliorer ce programme.
@+
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
29 janv. 2010 à 13:55
Pas de grosses erreurs mais à l'ouverture du projet, oulala çà fait un peu peur ce gros bloc de code... pense à aérer un peu.

Sinon à la lecture de ton code :

1) Un fois que tu crée : "Dim a As New FolderBrowserDialog"

Pense à liberé l'objet avec a.Dispose, ou alors utilise un bloc Using :

Using a As New FolderBrowserDialog
[code]
End Using

Et utilise une variable explicite, "a" etant peu parlant

Idem pour tes controles "CheckBox1, ...CheckBox3.. etc"


2) Alors çà ... promets moi de ne plus jamais le faire (on oubli VB6) :

'Réglage du temps
For i = 1 To 100000
Next i

Utilise plutot "Thread.Sleep()"

De plus ta progressBar ne sert pas à grand chose, vu qu'elle ne reflete en rien l'occupation de ton appli

3) Pour les clés de registre, pourquoi utiliser l'API Win32, utilise la Class Registry (Microsoft.Win32)

4) Cette operation me parait un peu suspecte ?

If (File.GetAttributes(Cheminfichier) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then

5) Pour ton tri de ListView, je te conseille de faire une classe a part

Genre :

Public Class ListViewColumnSorter Implements IComparer

Avec des attributs de classe propres

Public ColumnToSort As Integer
Public OrderOfSort As SortOrder
Public ObjectCompare As CaseInsensitiveComparer

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
[... ]
End Function

Ensuite dans ta form1 tu peux faire :

Dans le constructeur de la Form1 : Private lvwColumnSorter As ListViewColumnSorter

Private Sub ListView1_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick

If (e.Column = lvwColumnSorter.SortColumn) Then
If (lvwColumnSorter.Order = SortOrder.Ascending) Then
lvwColumnSorter.Order = SortOrder.Descending
Else
lvwColumnSorter.Order = SortOrder.Ascending
End If
Else
lvwColumnSorter.SortColumn = e.Column
lvwColumnSorter.Order = SortOrder.Ascending
End If

CType(sender, ListView).Sort()

End Sub


6) Attention à çà : Lbl_source.Text & "" & fichier.Text

Si on se trouve dans la racine (ex : C:) celà te donnera "C:" & "" & fichier.Text --> C:\\nomfichier.ext

7) Fini le VB6 : MsgBox("Affichage Fichiers cachés débloqué")
On fait du .net maintenant : MessageBox.Show("Message", "Titre", MessageBoxButtons.OK, MessageBoxIcon.Information, )

8) Ici "Dim MyKey As Object"
MyKey est visiblement une chaine, donc 'Dim MyKey As String'

9) La aussi tu as un tableau à 1 dimension : ListeFichier.GetUpperBound(0)
donc ne t'embete pas : ListeFichier.Length

10) Là aussi : Dim cmpt As Int32
ne t'embete pas avec la taille de l'int : Dim cmpt As Integer

11) Je ne suis pas sur mais tu peux, au lieu de : ShellExecute(Handle.ToInt32, "Open", File, Parametres, My.Application.Info.DirectoryPath, 1)
faire : Process.Start(File)

12) Tu fais comme tu veux, mais ce genre de chose :
.Columns.Add("Nom", 120, HorizontalAlignment.Left) 'titre, dimension colonne,alignement texte
.Columns.Add("Taille", 50, HorizontalAlignment.Right)
.Columns.Add("Date création", 120, HorizontalAlignment.Center)
.Columns.Add("Dernière modification", 120, HorizontalAlignment.Center)
.Columns.Add("Dernier accès", 120, HorizontalAlignment.Center)

vu que çà ne bouge pas, je le fais directement sur le composant à la création (via la PropertyGrid de VS)


Bon je vais arreter là pour le moment, car je n'ai plus trop le temps, et je pense qu'avec çà tu as encore pas mal de boulot pour améliorer ta source.

Mais sinon à part çà j'ai quand meme constaté qu'il y avait des choses pas trop mal, et felicitation pour le travail fournis.J

Et je le repete : je ne te dis pas tout çà pour te descendre mais afin que tu puisse t'améliorer !

Bon code.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 janv. 2010 à 13:35
salut,

WshShell = CreateObject("Wscript.Shell")

on atteint des sommets là, du VBS dans du DOTNET...

le framework a prévu des méthodes, faut s'en servir :)

http://msdn.microsoft.com/fr-fr/library/microsoft.win32%28VS.80%29.aspx

++
Rejoignez-nous