O Directory.GetFiles não pega todos os arquivos

23

Eu tenho algum código destinado a obter arquivos em um diretório, o que é bastante simples

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

Os arquivos são nomeados da seguinte maneira:

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

Meu problema é que ele não está pegando o último arquivo.

Corrigi o código colocando isso:

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

Dizendo obter qualquer arquivo que contenha Totais e .csv, com qualquer coisa após o .csv.

O que eu não entendo é por que ele obteve os quatro arquivos principais, mas não o inferior.

Eu teria pensado que nenhum dos arquivos seria pego pelo código original?

zedgraphsad
fonte
11
O arquivo em questão foi excluído, mas é mantido aberto por antivírus ou similar? Isso pode levar a um arquivo "fantasma", onde o explorer ainda o lista, mas ele não existe mais no disco.
Lasse V. Karlsen em
6
Aparentemente, os quatro primeiros arquivos têm um nome 8.3 e o último não.
GSerg 31/01
11
O nome abreviado é seu inimigo, quando há muitos arquivos, então Totals~n.csvnão cabe mais e você só pode obter uma correspondência Total*. Digite dir /x tot*.*para ver nomes abreviados. Você é a favor Totals.csv*e pode ter que filtrar para eliminar correspondências acidentais.
Hans Passant

Respostas:

20

Aparentemente, GetFilesadere à lógica de correspondência de padrões conforme é implementada, digamos, no dircomando.

MSDN

Como esse método verifica os nomes de arquivos com o formato 8.3 e o formato longo, um padrão de pesquisa semelhante ao "*1*.txt"pode retornar nomes de arquivos inesperados. Por exemplo, o uso de um padrão de pesquisa "*1*.txt"retorna "longfilename.txt" porque o formato equivalente do nome de arquivo 8.3 é "LONGFI ~ 1.TXT".

Como o @GSerg apontou, alguns de seus arquivos têm um nome 8.3 correspondente.

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

Tente alterar o padrão Totals.csv*para corresponder a todos os arquivos.

user1859022
fonte