Directory.GetFiles가 모든 파일을 선택하지는 않습니다


23

디렉토리에 파일을 가져 오는 코드가 있습니다.

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

파일 이름은 다음과 같습니다.

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

내 문제는 마지막 파일을 선택하지 않는다는 것입니다.

대신 이것을 넣어 코드를 수정했습니다.

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

총계와 .csv가 포함 된 파일을 .csv 뒤에있는 파일로 가져옵니다.

내가 얻지 못하는 것은 왜 상위 4 개의 파일을 얻었 지 만 맨 아래는 아닙니다.

원본 코드로 파일을 가져 오지 않을 것이라고 생각 했습니까?


1
문제의 파일이 삭제되었지만 바이러스 백신 또는 이와 유사한 방식으로 열려 있습니까? 이것은 탐색기가 여전히 파일을 나열하는 "고스트"파일로 이어지지 만 실제로는 더 이상 디스크에 존재하지 않습니다.
Lasse V. Karlsen

6
분명히 처음 네 파일은 8.3 이름을 가지고 마지막 파일은 이름을 갖지 않습니다.
GSerg

1
파일 이름이 너무 많으면 Totals~n.csv더 이상 맞지 않고 일치하는 항목 만 검색 할 수 있습니다 Total*. dir /x tot*.*짧은 이름을 보려면 입력 하십시오. Totals.csv*우연히 일치하는 것을 제거하기 위해 선호 하고 필터링해야 할 수도 있습니다.
Hans Passant

답변:


20

분명히 GetFiles그것이 말에서 구현으로 패턴 매칭 로직을 준수 dir명령을 사용합니다.

MSDN

이 방법은 8.3 파일 이름 형식과 긴 파일 이름 형식을 모두 사용하는 파일 이름을 검사하므로 "*1*.txt"예기치 않은 파일 이름 과 유사한 검색 패턴 이 반환 될 수 있습니다. 예를 들어, "*1*.txt"8.3 파일 이름 형식이 "LONGFI ~ 1.TXT"이므로 검색 패턴을 사용하면 "longfilename.txt" 가 반환됩니다.

@GSerg가 지적한 것처럼 일부 파일은 8.3 이름과 일치합니다.

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

Totals.csv*모든 파일과 일치 하도록 패턴을 변경하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.