20100909
voir le projet détaillé:
PreventionDisqueDur.
résumé:
Le programme proposé ici enregistre toutes les signatures
MD5 des fichiers présents sur votre disque dur lors de son exécution.
Lors d'une récupération future, il sera ainsi possible d'associer à un fichier découvert son ancien nom et de le replacer dans la hiérarchie des fichiers.
le fichier créé est horodaté!
Pour la récupération:
DoMd5Recup
version ="0.1.3"
' détailler "autres"
depart=now ' pour récap finale
sep=" " ' mettre >" " pour interclassement avec recup
dim fo
nomout=fmtdate(depart)
set fs=createobject("scripting.filesystemobject")
set fo=fs.createtextfile(nomout & ".log",true)
nbfiles=0 ' nb fichiers lus
nbfolders=0 ' nb dossiers
nbdeny=0 ' nb de refus
lontot=0 ' somme des longueurs
racine="c:\"
fo.writeline "<DEB> Calcul MD5 V" & version & ", etc... " & fmtdate(depart ) & " " & racine
dodir racine
fo.writeline "<FIN> " & fmtdate(now ) & " départ: " & depart & " fin: " & now & " vus: " & nbfiles & " autres: " & nbdeny & " dossiers: " & nbfolders & " size: " & lontot
fo.close
msgbox "départ: " & depart & vbcrlf & "fin: " & now & vbcrlf & "terminé vus: " & nbfiles & " autres: " & nbdeny & vbcrlf & "dossiers: " & nbfolders & vbcrlf & "size: " & lontot
' c'est fini
function fmtdate (d)
fmtdate=Format (d,"yyyymmdd_hhnnss")
end function
sub doprop (obj,item)
' recherche du propriétaire à faire
exit sub
For i = 0 to 13
msgbox obj.GetDetailsOf (item, i)
Next
end sub
function dt14 (obj)
dt14m= fmtdate(obj.datelastmodified )
dt14c= fmtdate(obj.datecreated)
dt14a= fmtdate(obj.datelastaccessed)
dt14= """" & dt14c & " " & dt14m & " " & dt14a & """"
end function
sub dodir(rac)
set o=fs.getfolder(rac)
prem=true
if (o.attributes and 1024) = 1024 then
' si link juste écrire, ne pas suivre
if len(rac)>3 then fo.writeline "<LNK> """ & fmtdate(o.DateCreated) & """ " & attribstr (o) & " """ & rac & """"
else
Set colFiles = o.Files
on error resume next
For Each objFile In colFiles
if err.number>0 then
on error goto 0
if len(rac)>3 then fo.writeline "<ERR> """ & fmtdate(o.DateCreated ) & """ " & attribstr (o) & " """ & rac & """"
exit sub
end if
on error goto 0
if prem then if len(rac)>3 then fo.writeline "<REP> " & dt14(o) & " " & attribstr (o) & " """ & rac & """"
prem=false
doprop o,objfile
domd5 objFile
Next
Set colFiles = o.SubFolders
For Each objFile In colFiles
if right(rac,1)="\" then rac=left(rac,len(rac)-1)
nbfolders=nbfolders+1
dodir rac & "\" & objfile.name ' ,sizefofo
Next
end if ' 1024
end sub 'dodir
sub domd5 (myfile) ',sizefo)
h= GetFileCheckSum( myFile )
if h="" then
lib="<ACC>"
nbdeny=nbdeny+1
else
lib="<FIC>"
nbfiles=nbfiles+1
end if
dim o
set o=fs.getfile(myfile)
dim dt
sizefi=o.size
sizefo=sizefo+sizefi
fo.writeline lib & " """ & h & """ " & sep & dt14(o) & " " & attribstr(o) & " """ & myfile & """ (" & sizefi & ")"
lontot=lontot+sizefi
end sub ' domd5
sub unattr(att,va,lettre,st)
if (att and va) = va then
st=st & lettre
att=att-va
else
st=st & "-"
end if
end sub
function attribstr (objfi)
attr=objfi.Attributes
S=""
unattr attr,1,"R",S
unattr attr,2,"H",S
unattr attr,4,"S",S
unattr attr,8,"V",S
unattr attr,16,"D",S
unattr attr,32,"A",S
unattr attr,64,"L",S
unattr attr,128,"C",S
unattr attr,1024,"J",S
unattr attr,2048,"Z",S
if attr<>0 then S=S & " [" & a & "]"
attribstr="""" & S & """"
end function
Function Format(vExpression, sFormat)
set fmt = CreateObject("MSSTDFMT.StdDataFormat")
fmt.Format = sFormat
set rs = CreateObject("ADODB.Recordset")
rs.Fields.Append "fldExpression", 12 ' adVariant
rs.Open
rs.AddNew
set rs("fldExpression").DataFormat = fmt
rs("fldExpression").Value = vExpression
Format = rs("fldExpression").Value
rs.close: Set rs = Nothing: Set fmt = Nothing
End Function
Function GetFileCheckSum( myFile )
' This function uses X-standards.com's X-MD5 component to calculate
' the MD5 checksum of a file.
'
' Argument:
' myFile [string] the file name whose checksum is to be calculated
'
' Written by Rob van der Woude
' http://www.robvanderwoude.com
'
' The X-MD5 component is available at:
' http://www.xstandard.com/page.asp?p=C8AACBA3-702F-4BF0-894A-B6679AA949E6
' For more information on available functionality read:
' http://www.xstandard.com/printer-friendly.asp?id=44AFBB03-EDC1-49FE-94CC-333AE728331E
Dim objMD5
Set objMD5 = CreateObject( "XStandard.MD5" )
GetFileCheckSum = objMD5.GetCheckSumFromFile( myFile )
Set objMD5 = Nothing
End Function
perfs (c: de
DellE520) : environ 100000 fichiers à l'heure; à ce soir!