cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008
-
10 mars 2008 à 11:00
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
12 mars 2008 à 14:30
Bonjour,
Dans le cadre d'un stage, je suis en train de déveloper une application pour libérer de l'espace sur le serveur où sont stockés les fichiers des employés.Je vais vous la décrire:
-l'utilisateur choisi le dossier où sont sauvegardés ses fichiers
-l'application va copier tout le dossier sur le C:
-elle va supprimer du serveur tous les fichiers dont la dernière écriture remonte à 30 jours ou plus
J'ai réussi à faire la copie sur le C: mais je n'arrive pas à concevoir d'algoritme pour cela (et étant en BTS réseau bcp de subtilité de VB m'échappent).Voilà cmt je conçois ce code: il devra aller dans le dossier sélectionné par l'utilisateur(je suppose que ce dossier contient des sous-dossier et des fichiers), il devra faire la vérification des dates sur les fichiers puis supprimer ceux concernés.Ensuite il doit aller dans le premier sous-dossiers, et refaire le traitement d'abors sur les fichiers, et ensuite dans les éventuels sous-dossiers.Quand il a terminé il doit remonter juste avant le dernier dossier vérifié et refaire le traitement.Ce n'est peut-être pas trés clair, je termine mon explication avec un petit schéma:
________________________________________________________________________________________
dir1
fic2
dir2
fic3
dir3 fic4
dir4
fic5
dir5
fic6
fic1
________________________________________________________________________________________
L'appli va traiter fic1, puis rentrer ds dir1, traiter fic2,revenir à la racine,rentrer ds dir2, traiter fic3,revenir,rentrer ds dir3,traiter fic4, rentrer ds dir4 traiter fic5,revenir en arrière afin de rentrer dans dir5, de traiter fic6, puis fin.
J'èspère avoir été le plus clair possible ^^
Je vous remercie d'avance pour l'aide que vous voudrez bien m'accordez ça fait 2 jours que je bloque dessus et je commence à prendre du retard :S
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 10 mars 2008 à 12:07
recursivité...
Sub CleanFolder ( Dossier )
Pour chaque Fichier de Dossier
Si DateModif de Fichier > 30 jours
Alors
Supprime Fichier
FinSi
FinPour
Pour Chaque SousDossier de Dossier
CleanFolder SousDossier
Si SousDossier vide
Alors
Supprime SousDossier
FinSi
FinPour
End Sub
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 11 mars 2008 à 11:47
15 minutes de codage, et encore, j'ai tatonné car je ne code pas en .Net.
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.FileSystem.CopyDirectory("C:\font", "C:\save", True)
CleanFolder(My.Computer.FileSystem.GetDirectoryInfo("C:\font"))
End Sub
Private Sub CleanFolder(ByRef voFolder As System.IO.DirectoryInfo)
For Each oFile As FileInfo In voFolder.GetFiles
If oFile.LastWriteTime.AddDays(5) < DateTime.Now Then
oFile.Delete()
End If
Next
For Each oFolder As DirectoryInfo In voFolder.GetDirectories
CleanFolder(oFolder)
Next
If voFolder.GetFiles.GetLength(0) 0 And voFolder.GetDirectories.GetLength(0) 0 Then
voFolder.Delete()
End If
End Sub
End Class
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 10 mars 2008 à 15:42
Bon j'ai écrit le code, mais je rencontre des problèmes(normal ^^).
Je joins le code, si quelqu'un avait le temps de me dire cmt arranger les erreurs rencontrées, parce que j'y perds mon latin :S
-au niveau de CopieRepertoire() ==> SystemIO.IOException
-et plein d'autres erreurs sûrement
Imports
System.IO
Public
Class Form1
Dim root, dirsource
As
String
'dossier source
'affichage de la boîte de dialogue permettant le choix du répertoire source
Private
Sub btParcourir_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btParcourir.Click
'si l'utilisateur
If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK
Then
'dirsource prend comme valeur le chemin selectionné par l'utilisateurroot = FolderBrowserDialog1.SelectedPath
'le chemin est convertis en caractère pour être affiché dans txtBox1txtBox1.Text = root.ToString
Else
Me.Close()
End
If
End
Sub
'procédure sur bouton ANNULER
Private
Sub btAnnuler_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btAnnuler.ClickMsgBox(
"Sauvegarde obligatoire une fois pas mois!!")
Me.Close()
End
Sub
Private
Sub CopieRepertoire(
ByVal RepertoireSource
As
String,
ByVal RepertoireDestination
As
String)
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 10 mars 2008 à 15:44
si y a moyen sur un forum de joindre des fichiers dites moi cmt on fait(j'ai pas trouvé), si vous voulez je joins le dossier contenant mon pojet VB, cela surement plus clair pour voir les bug divers
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 10 mars 2008 à 16:18
Euh j'ai trouvé ce code sur un tuto(pour la fonction calculLastWrite).Pour Fi je pensais mettre dans la variable Fi la date de dernière écriture du fichier traité...)
Fi est rattaché à FileInfo.
Donc je devrais faire quelque chose qui ressemble à ça?
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 11 mars 2008 à 09:52
Je reposte mon code(au passage si vous savez cmt on fait pour joindre des fichiers au message que j'évite d'alourdir le forum), je ne comprends pas j'ai toujours un problème à CopieRepertoire()==>IOException QD LE REPERTOIRE C:\Save est REMPLIE avec mes dossiers tests, est qd le dossier c:\Save est vide, j'ai un problème de boucle infini avec TraitementFichier().Je pensais que l'erreur venait de TraitementSD() placée avant le Next, mais même placée aprés le problème persiste...
Merci de votre aide
Imports
System.IO
Public
Class
Form1
Dim
root, dirsource
As
String
'dossier source
'affichage de la boîte de dialogue permettant le choix du répertoire source
Private
Sub
btParcourir_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btParcourir.Click
'si l'utilisateur
If
FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK
Then
'dirsource prend comme valeur le chemin selectionné par l'utilisateur
root = FolderBrowserDialog1.SelectedPath
'le chemin est convertis en caractère pour être affiché dans txtBox1
txtBox1.Text = root.ToString
Else
Me
.Close()
End
If
End
Sub
'procédure sur bouton ANNULER
Private
Sub
btAnnuler_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btAnnuler.Click
MsgBox(
"Sauvegarde obligatoire une fois pas mois!!"
)
Me
.Close()
End
Sub
Const
dirdest
As
String
=
"C:\Save"
Public
Sub
CopieRepertoire(
ByVal
dirsource
As
String
,
ByVal
dirdest
As
String
)
My
.Computer.FileSystem.CopyDirectory(dirsource, dirdest)
End
Sub
Private
Sub
traitementSD()
For
Each
sousRepertoire
As
String
In
Directory.GetDirectories(dirsource)
TraitementFichier(dirsource)
Next
End
Sub
Private
Sub
TraitementFichier(
ByVal
dirsource)
For
Each
fichier
As
String
In
Directory.GetFiles(dirsource)
If
System.IO.File.GetLastWriteTime(dirsource).AddDays(5) < DateTime.Now
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 11 mars 2008 à 10:52
J'ai essayié mais cela ne fonctionne pas...Et tu aurais une idée pour la boucle infini
Je vais fouiller du côté des valeurs que prennent mes variable root et dirsource peut-être que c'est là...
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 11 mars 2008 à 14:15
ça maaaaaarche!!!Tu resteras mon héros à tout jamais!!j'ai plus qu'à habiller le tout, mettre une barre de progression de tâche, un menu pour contacter l'admin en cas de problème, une explication du but de l'appli au démarrage de l'appli.....pas mal de truc en fait mais bon le plus gros est passé je pense!! ^^
Je vais en griller une à ta santé et encore merci
cs_GorGor33
Messages postés29Date d'inscriptionlundi 3 mars 2008StatutMembreDernière intervention26 mars 2008 12 mars 2008 à 14:27
Hum même si c'est pas le bon forum , cela concerne tjrs l'appli sur laquelle tu m'as aidé.Je voulais savoir comment faire pour faire que mon appli se lance automatiquement tous les 30 jours?sans être obligé de rajouter une clé de registre sur chaque poste du réseau, sachant que l'appli devra être installé sur chaque poste, à moins que je trouve quelque chose pour la laisser sur un serveur, et faire qu'elle s'exécute sur chaque poste depuis le serveur?.?.?.?
Merci