Analisi file in una directory

lunedì 10 settembre 2007 - 14.12

Maurizio_Roma Profilo | Newbie

Salve a tutti, ho bisogno del vostro aiuto per risolvere un problema con vb.net.
Sto utilizzando il metodo My.Computer.FileSystem.GetFiles, per avere l'elenco completo dei file con una determinata estensione in una directory.
Il mio problema è che il contenuto dell'elenco lo metto in un file.txt per poi discriminare i file con carattere & all'interno della lista. Dato che i file sono numerosi e il file txt diventa di dimensioni enormi ogni volta, il .net framework mi da errore.
Vorrei fare la discriminazione dei file con il carattere & prima della creazione del file ListaFile.txt, ma non so come fare la ricerca specificando "diverso da &*.dat"


For Each foundFile As String In My.Computer.FileSystem.GetFiles _
("C:\Inetpub\ftproot\Scarico", FileIO.SearchOption.SearchTopLevelOnly, "*.dat")
foundFile = foundFile & vbCrLf
My.Computer.FileSystem.WriteAllText _
("C:\Inetpub\ftproot\Scarico\ListaFile.txt", foundFile, True)

Questo era il codice così com'è al momento.

Grazie dell'aiuto.

Brainkiller Profilo | Guru

>Il mio problema è che il contenuto dell'elenco lo metto in un
>file.txt per poi discriminare i file con carattere & all'interno
>della lista. Dato che i file sono numerosi e il file txt diventa
>di dimensioni enormi ogni volta, il .net framework mi da errore.

Dimensioni enormi = quanto ?

Quale errore ?

>Vorrei fare la discriminazione dei file con il carattere & prima
>della creazione del file ListaFile.txt, ma non so come fare la
>ricerca specificando "diverso da &*.dat"

Puoi recuperare i files che contengono la & utilizzando invece che *.dat una cosa tipo *&*.dat

Fammi sapere le info che ti ho chiesto sopra.
cIao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Maurizio_Roma Profilo | Newbie

Sono parecchi mega, in quanto i file presenti nella directory sono più di 7000 e ogni giorno vengono scaricati 12 file nuovi. Utilizzo quel metodo per creare una lista file per poter poi analizzare e successivamente trasferire il contenuto dei file dat in un database sql.
Il carattere &, lo inserisco io all'inizio di ogni file appena terminata l'acquisizione dello stesso, in modo da poter distingure i file già processati da quelli che ancora non lo sono stati.
Il fatto è che il file txt generato dal metodo che ho indicato nel post precedente, inserisce all'interno dello stesso tutti i file con estensione dat, quello che vorrei fare io, se possibile, è che tutti i file .dat con la & all'inizio del nome non vengano considerati dal metodo, e che all'interno del file txt vengano scritti solo i file .dat senza &.
E' possibile fare una cosa del genere modificando la parte di codice che ho inserito nel post precedente?

Grazie

Brainkiller Profilo | Guru

>Sono parecchi mega, in quanto i file presenti nella directory
>sono più di 7000 e ogni giorno vengono scaricati 12 file nuovi.

Immagino che non tutti i 7000 debbano essere tenuti lì o sì ?

>E' possibile fare una cosa del genere modificando la parte di
>codice che ho inserito nel post precedente?

Con le operazioni su disco di questo tipo se non te la cavi con i wildcards c'è poco da fare e quindi bisogna sempre enumerare tutti i files oppure nominarli in un modo particolare esempio con un ID numerico 1.dat, 2.dat, ecc. e man mano registrare in un file di testo l'ultimo file elaborato, utile per il giorno dopo.

Il giorno dopo comunque bisognerà pur sempre fare una GetFiles() e scartare i file minori o uguali rispetto all'ID registrato.

E' chiaro che più i file diventano numerosi più la tua applicazione diventa lenta ed ha problemi di performance.

Per questo la mia domanda a inizio post. Eventualmente portare i 12 file giornalieri in un'altra cartella, elaborarli, cambiare nome mettendo la & e poi spostarli in una cartella di storico.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Maurizio_Roma Profilo | Newbie

I file vengono scaricati in automatico nella cartella specificata da un database informix, l'unica cosa che sono riuscito a fare è spostare i file marcati in un altra directory in modo da lasciare nella cartella di scarico solo i file senza marcatura, sperando che il "cliente" accetti questa soluzione.
A dire il vero pensavo che dopo aver specificato "*.dat" fosse possibile fare una sorta di <> "&*.dat", ma il carattere diverso non me lo accetta.

Comunque se per caso c'è una soluzione per questo, sono qui per leggerla.

Grazie comunque dell'aiuto.

Brainkiller Profilo | Guru

>Comunque se per caso c'è una soluzione per questo, sono qui per
>leggerla.

Ti sparo una pillolina d'oro
Allora se io in una cartella ho questi file:

aaa.exe baz.exe bbb.exe zab.exe

e voglio selezionare solo quelli che contengono nel loro nome la lettera "z" posso usare questo comando:

dir /b | find "z" /V

infatti dà come risultato:

aaa.exe bbb.exe

Ora chiaramente questo codice funziona in una shell dei comandi. Ma tu da .NET puoi sempre lanciare un comando esterno e redirezionare l'output per esempio su un file di testo così:

dir /b | find "z" /V > fileditesto.txt

A questo punto ti leggi il file di testo.
Modifica i comandi utilizzando la & al posto della Z. Insomma quello che ti serve.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

SSUPERPIPPO Profilo | Guru

Io più semplicemente farei un verifa sulla stringa prima di effettuare la scrittura su file modificando il tuo codice in questo modo:

>For Each foundFile As String In My.Computer.FileSystem.GetFiles _
>("C:\Inetpub\ftproot\Scarico", FileIO.SearchOption.SearchTopLevelOnly, "*.dat")

If Instr(foundFile, "&")="0" then

> foundFile = foundFile & vbCrLf
> My.Computer.FileSystem.WriteAllText _
> ("C:\Inetpub\ftproot\Scarico\ListaFile.txt", foundFile, True)

end if

>Next

In questo modo il file viene aggiunto al tuo file di testo solo se non contiene il carattere "&"

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5