Ho un database access con un campo di testo chiamato "PercorsoFoto" dove vi sono i percorsi di vari file.
Ho visto che la cartella ha raggiunto dimensioni notevoli e volevo cancellare i file che non sono collegati al database;
come potrei fare?
Ho un database access con un campo di testo chiamato "PercorsoFoto" dove vi sono i percorsi di vari file.
Ho visto che la cartella ha raggiunto dimensioni notevoli e volevo cancellare i file che non sono collegati al database;
come potrei fare?
vuoi cancellare files ma nel database hai il percorso .... forse manca qualcosa ?
o forse vuoi cancellare tutti i files nei percorsi non presenti nel database ?
o forse esistono altre possibilità ?
dilemma ....
Si, vorrei lasciare intatti i file presenti nel database e cancellare tutto il resto.
con fso fai un ciclo per leggere il contenuto delle cartella. poi, ogni dati estratto, lo confronti con la lista del db: se il valore non è presente nel db cancelli il file
di quanti dati parliamo?
Sono un centinaio di files, me lo chiedi perché si potrebbe arrivare al timeout dello script?
Avevo abbozzato questo codice che però fa il contrario, cancella quello che c'è nel database:
mi suggeriresti il codice per confrontare i files letti nella cartella a quelli nel database?codice:sql = "select * from cataloghi" set rec = conn.execute(sql) if not rec.eof then do while not rec.eof productID = rec("productID") PercorsoImg1 = rec("Foto1") Dim fs Set fs = Server.CreateObject("Scripting.FileSystemObject") rec.MoveNext IF fs.FileExists (Server.MapPath(PercorsoImg1)) Then fs.DeleteFile server.MapPath(PercorsoImg1),True ELSE response.write("NON ESISTE") response.write("</br>") END IF Loop end if Set fs = nothing
magari con qualche migliaio potrebbero cominciare problemi, un centinaio è roba da ridere
hai lavorato al contrario della tua necessità
esplora la cartella, e durante l'esplorazione fai la verifica:
se non è presente nel db cancelli, altrimenti fai nulla
C'è qualcosa che non va, non cancella nessun file
codice:<% Dim objFso, objFolder, objFiles, strFolder, strFile strPath = "/foto-prodotti" Set objFso = Server.CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(Server.MapPath(strPath)) Set objFiles = objFolder.Files For Each strFile in objFiles '------------------------------------------------- INIZIO ciclo interno sql = "select * from cataloghi" set rec = conn.execute(sql) if not rec.eof then do while not rec.eof productID = rec("productID") PercorsoImg1 = rec("Foto1") Dim fs Set fs = Server.CreateObject("Scripting.FileSystemObject") rec.MoveNext RESPONSE.write "<br>----" RESPONSE.write PercorsoImg1 RESPONSE.write "<br>----" RESPONSE.write strPath & "/" & strFile.name RESPONSE.write "<br>" RESPONSE.write "<br>" IF fs.FileExists (Server.MapPath(PercorsoImg1)) Then IF strPath & "/" & strFile.name=Server.MapPath(PercorsoImg1) THEN fs.DeleteFile server.MapPath(PercorsoImg1),True ELSE response.write("NON ESISTE") response.write("</br>") END IF Loop end if Set fs = nothing rec.Close set rec = nothing '------------------------------------------------- FINE ciclo interno Next conn.Close Set conn = nothing Set objFso = Nothing Set objFolder = Nothing Set objFiles = Nothing %>
codice:strPath = "/foto-prodotti" Set objFso = Server.CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(Server.MapPath(strPath)) Set objFiles = objFolder.Files For Each file in objFiles sql = "select * from cataloghi where nomeFoto='"&file.name&"' " set rec = conn.execute(sql) if rec.eof then 'response.write server.MapPath(strPath)&"\"&file.name &"<br>" objFso.DeleteFile(server.MapPath(strPath)&"\"&file.name) end if rec.Close set rec = nothing Next Set objFso = Nothing Set objFolder = Nothing Set objFiles = Nothing
Grazie per lo script, mi cancella però tutti i files della cartella, anche quelli non presenti nel database (tranne le sotto cartelle).
io non credo...![]()