Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Confronto cartelle in Visual Basic

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

Confronto cartelle in Visual Basic

Postdi embassy » 01/09/08 16:35

Ciao a tutti, ho bisogno del vostro aiuto.... tanto tanto :oops:
vi spiego la situazione, abbiamo un programma in access dove teniamo traccia dei programmi che manutentiamo.
ho bisogno di creare un bottone che :
confronti le cartelle A e B, C e D, E e F (dove le cartelle A, C, E sono cartelle di lavoro, mentre la B D F quelle definitive) e che mi dica quali file sono diversi, (tipo windiff, però possibilmente facendo in un colpo solo il confronto su più di due cartelle).
adesso arriva il difficile:
il risultato devo incrociarlo con il programma in access, per vedere se i file/programmi in questione sono ancora in manutenzione, oppure sono stati completato e quindi essendo diversi (da confronto di prima) posso copiarli nella cartella difinitiva.

In soldoni mi serve una funzione che mi duia lapossibilità di tenere sincronizzate due cartelle, sulla base però,. dei dati che ho in access.

quello che vorrei è un pezzo di codice, dove poter partire, quali funzioni posso usare, ecc...
insomma tutto l'aiuto ch epotete darmi

è urge plz...help

un povero disperato
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Sponsor
 

Re: Confronto cartelle in Visual Basic

Postdi Dylan666 » 01/09/08 19:34

Io farei un query al DB di access con cui mi ricavo il nome dei file in lista e il loro stato (mi immagino ci sia una colonna che dice "in lavorazione" o "completato").
http://www.lukeonweb.net/313.asp

Se lo stato è "completato" partirà l'operazione di copia, se invece è "in lavorazione" parte quella di comparazione.
Per la seconda vedi qui:
http://support.microsoft.com/kb/320346

La verifica è fatta sul contenuto del file stesso, non sulla data di modifica, quindi è molto più lento ma molto più preciso.
Se ti conviene dipende da quanto sono grandi gli oggetti da esaminare.

Potresti anche fare l'esatto contrario, cioè fare una store procedure che una volta lanciata esegua l'operazione di copia per tutti i file il cui stato gli risulti "completato" e quella di comparazione per tutti quelli incompleti

http://www.devcity.net/Articles/18/msaccess_sp.aspx
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Confronto cartelle in Visual Basic

Postdi embassy » 02/09/08 09:05

quasi... solo che la lista da cui partire la devo ricavare dal confronto tra le due cartelle .... e qui che mi manca il pezzo di codice :) .... e da questa lista... verificare in access, per i file diversi, quali sono "in lavorazione" e quali invece "completi" e quindi successivamente, e solo successivamente alla stampa, passare automaticamente o manualmente alla copia.

oppure, se esiste un sw che gia fa il confronto e ti da la possibilità di gestire/copiare i file, va bene lo stesso. A patto però che, come dici te mi ricavo la lista dei file in lavorazione da access, possa dare questi file in imput come "da escludere"
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi hydra » 02/09/08 10:17

Beh, recuperare l'elenco dei file di due cartelle è una cosa banale, una delle primissime operazioni che si insegnano quando si inizia a manipolare i file. Oltretutto se non hai sottocartelle diventa una passeggiata, in quanto non hai bisogno di utilizzare funzioni ricorsive. In rete trovi di tutto, basta solo cercare.
Avatar utente
hydra
Moderatore
 
Post: 7002
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Re: Confronto cartelle in Visual Basic

Postdi zello » 02/09/08 10:55

secondo me stiamo un pochino reinventando la ruota, comunque, prendendo due cartelle (A e B), a livello logico
- ricavo la lista dei file in A e li piazzo in una lista
- cerco in B ogni file della lista (per quelli non presenti vedi un po' come fare, se considerarli differenti o se scartarli; tra l'altro l'algoritmo non funziona se in B ci sono file che non si trovano in A)
- per ogni file trovato, verifico se ci sono differenze (e fermo l'analisi alla prima differenza, tanto per risparmiare tempo di computazione [*]); se anche si tratta di files binari il meccanismo funziona con la stessa logica.
- alla fine hai una lista di file differenti: confronti con ciò che hai in Access, e sei a posto.

[*] in C li mapperei in memoria in sola lettura e farei un confronto byte per byte (in realtà lo farei int per int, perché è più veloce), alla prima differenza uscirei. Se i file sono lunghi, li mappo un chunk alla volta.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Re: Confronto cartelle in Visual Basic

Postdi embassy » 02/09/08 16:54

ciao, intanto grazie a tutti per l'aiuto... e visto che siete così gentili ... vi chiedo altro :lol:
come "idea" c'ero mi mancava, non conoscendo il linguaggio, il codice.
oggi smanetto un po e scopro che al primo punto illustrato da zello... gia sono bloccato.

inanto specifico che il linguaggio è VBA e non VB puro... cosa che mi limita un sacco.
cmq cerco nella guida e trovo questa funzione per farmi restutuire il numero di files trovati e il percorso.
cosa che poi "lavorata" mi puo andare bene


Private Sub ChkDiff_Click()
On Error GoTo Err_ChkDiff_Click
Dim i As Integer
Set fs = Application.FileSearch
With fs
.LookIn = "C:\pippo"
.FileType = msoFileTypeAllFiles
If .Execute > 0 Then
MsgBox "There were " & .FoundFiles.Count & " file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With


codice palesemente copiato dall'help... ma non va!!!!!

provo a cambiare
.FileType = msoFileTypeAllFiles

con
.FileName = "*.*" o .FileName = "*p.*" o .FileName = "*"


e indovinate nn trova una cippa!!!!!
va solo se gli do un'estension
.FileName = "*.txt"

allora mi trova i miei 3 file in txt (pippo.txt, pluto.txt, ciccio.txt)

che cavolo vuole dalla mia vita!!!! vabbene che non conoscerò tanto VB o VBA, ma copiare un pezzo di codice dall'help e scoprire che non va mi fa sentire male :eeh:

aiutooooooo
grazie ancora
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi zello » 03/09/08 07:49

Ho copiato/incollato il tuo codice, limitandomi a cambiare la cartella in c:\temp, e da me funziona perfettamente.
Non so che dire.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Re: Confronto cartelle in Visual Basic

Postdi embassy » 03/09/08 09:00

zello ha scritto:Non so che dire.

sono commosso :evil:
ma tutte a me!!! visto che sieta così gentili... non aveta qualche altra procedura, che non utilizzi il FileSearch ???
inizio a demoralizzarmi :cry:
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi embassy » 03/09/08 09:41

ps... nel quote volevo prendere tutto il msg... non vorrei essere mal interpretato, visto lo smile ^^
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi embassy » 03/09/08 16:31

eccomi ancora qui per qualche dritta.
alla fine mi sono rotto, e ho adottato un programma esterno.

ho creato un bottone che invoca una macro, che nell'ordine esegue queste cose:
chiama il programma CSDIFF (con passaggio di parametri delle cartelle A e B)
chiama il programma CSDIFF (con passaggio di parametri delle cartelle C e D)
chiama il programma CSDIFF (con passaggio di parametri delle cartelle E e F)
questo crea 3 file txt (per le 3 coppie di cartelle) che ho collegato come tabelle in access.
svuoto quella che sarà la tabella per accorpare i dati
poi eseguo delle query di accodamento dalle mie tre tabelle/txt e mi riempio una tabella con l'elenco dei programmi differenti
eseguo un'altra query che mi incrocia i files in lavorazione con quelli della lista

la logica, corregetemi se sbalgio, funziona.
il problema è questo... la macro non aspetta che la prima chiamata al CSDIFF finisca... ne aspetta la secondo ecc... questo fa si che mi mostri i risultati ancora prima di avere creato le tabelle/txt... c'è un modo di far aspettare alla query che la prima chiamata finisca... dirgli fai le cose in maniera sequenziale e non contemporaneamente??? spero di essermi spiegato

altra cosa, ogni volta che lancio all'interno della macro, la query di accodamento, o quella di delete, questa mi avvisa che verranno aggiornati i dati, e mi tocca premere Si a mano. Non c'è il modo di automatizzare/forzare le domande che mi fa, passando per esempio dei parametri o qlc del genere???

ovviamente se vi sembra troppo contorto e si puo fare meglio, accetto consigli volentieri.
grazie ancora a tutti
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi embassy » 03/09/08 16:42

embassy ha scritto:altra cosa, ogni volta che lancio all'interno della macro, la query di accodamento, o quella di delete, questa mi avvisa che verranno aggiornati i dati, e mi tocca premere Si a mano. Non c'è il modo di automatizzare/forzare le domande che mi fa, passando per esempio dei parametri o qlc del genere???

mi rispondo da solo almeno su questo
esiste l'azione: "ImpostaAvvisi" che da praticamente un OK alle finestre che compaiono
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi archimede » 03/09/08 17:04

embassy ha scritto:...chiama il programma CSDIFF...
Come?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Confronto cartelle in Visual Basic

Postdi zello » 03/09/08 17:05

la macro non aspetta che la prima chiamata al CSDIFF finisca

Al posto di fare una macro, per quanto possa sembrare più complesso, usa una procedura di VB che usi la funzione CreateProcess per eseguire CSDiff. Poi usi WaitForSingleObject per aspettare che il programma abbia terminato (in C ti direi di lanciare tutti i programmi e poi usare WaitForMultipleObjects per attendere che abbiano tutti finito, che è più efficiente. Temo che in VB sia complesso, ma se c'è qualcuno esperto nella "traduzione" delle API C in VB qui c'è pane per i suoi denti)
Un esempio lo trovi qui
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Re: Confronto cartelle in Visual Basic

Postdi embassy » 03/09/08 18:07

oki.... grazie ancora... domani provo
se qlc v storto ... tornero!!!! :lol:

ciuaz
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni

Re: Confronto cartelle in Visual Basic

Postdi embassy » 05/09/08 09:12

Perfetto.... con la funzione che mi hai indicato, WaitForSingleObject, funziona tutto a meraviglia
grazie ancora
embassy
Utente Senior
 
Post: 682
Iscritto il: 09/12/02 16:40
Località: Sesto San Giovanni


Torna a Programmazione


Topic correlati a "Confronto cartelle in Visual Basic":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti