Elenco file in file di testo

di nickbi78 il
26 risposte
Buongiorno a tutti,

ho un file batch che generea in lista.txt tutti i percorsi le foto presenti in una cartella e relative sottocartelle (dir C:\miacartella\foto\*.jpg /b /on >C:\miacartella\foto\lista.txt)

l'ho tradotto in vb.net usando il seguente codice:

For Each foundFile As String In
My.Computer.FileSystem.GetFiles("C:\miacartella\foto\", FileIO.SearchOption.SearchAllSubDirectories, "*.jpg")
foundFile = foundFile & vbCrLf
My.Computer.FileSystem.WriteAllText("C:\miacartella\foto\LISTA.TXT", foundFile, True)
Next


funziona ma ci mette troppo tempo rispetto al file batch (20/30 secondi per il batch contro oltre il minuto per l'eseguibile vb.net)

E' un problema di metodo o si può cambiare codice migliorando le prestazioni?

grazie in anticipo

Nico

26 Risposte

  • Il programma in vb.net è in debug od in release?,l'hai installato?
  • Ciao,
    è in release già compilata e testata su un pc differente.
    Sulla mia macchina sia in debug che release ci mette meno poiché gira su ssd ma sempre più tempo rispetto al batch.
    Nico
  • Prova ad alzare la priorità del processo con qualcosa di simile(prima del ciclo) :
    Dim myProcess As System.Diagnostics.Process = _
    	System.Diagnostics.Process.GetCurrentProcess()
    myProcess.PriorityClass = System.Diagnostics.ProcessPriorityClass.High
  • Ok, provo appena rientro in ufficio e ti aggiorno.
    Intanto ti ringrazio
    Nico
  • Se non migliora potresti portare questo fuori dal ciclo "My.Computer.FileSystem.GetFiles("C:\miacartella\foto\", FileIO.SearchOption.SearchAllSubDirectories, "*.jpg")" e metterne il risultato in una variabile,non vorrei che fosse calcolato ad ogni ciclo
  • Anche con priorità più alta il risultato non cambia
    per il secondo metodo, non ho compreso come passare per variabile il risultato della scansione delle cartelle.

    Nico
  • >>>per il secondo metodo, non ho compreso come passare per variabile il risultato della scansione delle cartelle.
    dicevo di caricare il valore in una variabile , ma ripensandoci non credo che venga calcolata ad ogni iterazione,magari qualcun altro ha qualche altro suggerimento...
  • Stai facendo un "applicazione console" od un applicazione "windows forms"?,in quest'ultimo caso potresti provare a spostare il codice in un applicazione console
  • E' una windows form con dei pulsanti e messaggi descrittivi in base alle operazioni svolte al momento.
    in realtà la form esegue parecchio codice ed il blocco che ho postato viene eseguito al click di un pulsante di avvio e viene rieseguito a chiusura procedura.
    si tratta di un programmino che ho realizzato per sincronizzare in remoto 2 cartelle in cui quella utente diventa paritetica a quella remota nel contenuto.
    Nico
  • Prova così
            Dim fileNames = My.Computer.FileSystem.GetFiles("C:\miacartella\foto", FileIO.SearchOption.SearchAllSubDirectories, "*.jpg")
            File.WriteAllLines("C:\miacartella\foto\LISTA.TXT", fileNames)
  • Niente, esegue sempre intorno a 1:40 minuti, credo che alla fine sia pure influenzato dalle prestazioni della macchina e dal supporto in scrittura. Il batch invece continua a girare nell'ordine di 15 secondi.
    Mi sa che o lascio la form con così tenendomi i 2 minuti di attesa a ciclo o provo ad usare la procedura rikshell per eseguire il batch velocemente...
  • Potresti mettere un breakpoint dove inizia il ciclo ed uno alla sua uscita aggiungendo una qualsiasi istruzione fuori dal ciclo (ad es. Dim num1 As Integer = 3) per vedere se è solo quello che rallenta
  • Prova allora
            Dim oProcess As New Process()
            Dim oStartInfo As New ProcessStartInfo("Cmd.exe", "/c Dir C:\miacartella\foto\*.jpg /a /b /s > C:\miacartella\foto\LISTA.TXT")
            oStartInfo.UseShellExecute = True
            oProcess.StartInfo = oStartInfo
            oProcess.Start()
  • Hai un anivirus?
    Prova a spegnerlo e se funziona, riaccendero e configurarlo per NON controllare i file con estensione ".jpg"
Devi accedere o registrarti per scrivere nel forum
26 risposte