Directory.GetFiles non raccoglie tutti i file


23

Ho del codice che ha lo scopo di ottenere file in una directory, che è abbastanza semplice

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv", SearchOption.TopDirectoryOnly))

I file sono denominati come segue:

Totals.CSV142344
Totals.CSV142409
Totals.CSV142433
Totals.CSV142501
Totals.CSV142528

Il mio problema è che non sta recuperando l'ultimo file.

Ho corretto il codice inserendolo invece:

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv*", SearchOption.TopDirectoryOnly))

Dicendo ottieni tutti i file che contengono sia totali che .csv, con qualsiasi cosa dopo il .csv.

Quello che non capisco è perché ha ottenuto i primi quattro file, ma non il fondo.

Avrei pensato che nessuno dei file sarebbe stato raccolto dal codice originale?


1
Il file in questione è stato eliminato, ma è tenuto aperto da antivirus o simili? Ciò potrebbe portare a un file "fantasma" in cui Explorer lo elenca ancora, ma in realtà non esiste più sul disco.
Lasse V. Karlsen,

6
Apparentemente i primi quattro file hanno un nome 8.3 e l'ultimo no.
GSerg

1
Il nome breve è la tua nemesi, quando ci sono troppi file, allora Totals~n.csvnon si adatta più e puoi solo trovare una corrispondenza Total*. Digita dir /x tot*.*per vedere i nomi brevi. Preferisci Totals.csv*e potresti dover filtrare per eliminare le partite accidentali.
Hans Passant,

Risposte:


20

Apparentemente GetFilesaderisce alla logica di corrispondenza del modello in quanto è implementata in dire il dircomando.

MSDN

Poiché questo metodo verifica i nomi dei file sia con il formato nome file 8.3 sia con il formato nome file lungo, un modello di ricerca simile a "*1*.txt"può restituire nomi file imprevisti. Ad esempio, l'utilizzo di un modello di ricerca "*1*.txt"restituisce "longfilename.txt" poiché il formato del nome file 8.3 equivalente è "LONGFI ~ 1.TXT".

Come ha indicato @GSerg, alcuni dei tuoi file hanno un nome 8.3 corrispondente.

dir /x *Totals*.csv*

2020-01-31  09:33                 0 TOTALS~1.CSV Totals.CSV142344
2020-01-31  09:33                 0 TOTALS~2.CSV Totals.CSV142409
2020-01-31  09:33                 0 TOTALS~3.CSV Totals.CSV142433
2020-01-31  09:33                 0 TOTALS~4.CSV Totals.CSV142501
2020-01-31  09:33                 0 TO5404~1.CSV Totals.CSV142528

Prova a cambiare il motivo in modo Totals.csv*che corrisponda a tutti i file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.