2016-06-15 6 views
1

나는 명명 규칙 YYYYMMDDhhmm 형식에 CSV 파일의 목록을 .CSV필터링 날짜 시간 범위

오늘 오전 7의 경우 어제 오후 7시에서 필터링 파일을 할 필요가
201606131800.csv 
201606132000.csv 
201606140100.csv 
201606140300.csv 
201606140500.csv 
201606140700.csv 
201606140800.csv 

오늘 날짜 나 파일 이름 범위 이러한 CSV를 달성하는 데 필요한 14 2016년 6월

13 2016년 6월 오후 7시 2016년 6월 14 일 오전 7시에서

201606132000.csv 
201606140100.csv 
201606140300.csv 
201606140500.csv 
201606140700.csv 

오늘 선택된 파일을 썼습니다. 어제 오후 7시에서 11시 59 분까지 포함하는 날짜별로 필터링을 수행하려면 어떻게해야합니까?

string[] FileList = Directory.GetFiles(csvpath, DateTime.Today.ToString("yyyyMMdd") + "*.csv"); 
foreach (var fileName in FileList) 
    { 
    \\file process code. 
} 
+1

은 특정 파일의 이름과 생성 시간이 동일합니까? –

+0

이름은 같지 않지만 생성 시간은 동일 할 수 있습니다. 나는 창조 날짜에 거르는 기초를 사용할 수 없다. 예를 들어 '201606131800.csv - 2016년 6월 14일 1 am' '201606132000.csv - 2016년 6월 14일 1 '201606140100.csv am' - 2016년 6월 14일 1 – Jonathan

답변

0

파일 이름 및 생성 날짜 시간이 동일 할 경우 다음 목록을 얻기 위해 다음 코드를 사용할 수 있습니다

될 것 201606132000.csv라는 이름의 파일에 대한 예를 들어 CREATIONTIME를 들어 2016/06/13/ 20:00201606140500.csv이 될 것입니다 2016/06/14/ 05:00

DateTime yesterdayTime = DateTime.Now.AddDays(-1).Date.AddHours(19); 
DateTime TodayTime = DateTime.Now.Date.AddHours(7); 
List<FileInfo> FilesBetween7To7 = Directory.GetFiles("your path here") 
              .Select(x => new FileInfo(x)) 
              .Where(y => y.CreationTime > yesterdayTime && 
              y.CreationTime < TodayTime) 
              .ToList(); 

또는 다음 스 니펫을 사용하여 이름과 비교하고 파일을 선택할 수 있습니다.

DateTime yesterdayTime = DateTime.Now.AddDays(-1).Date.AddHours(19); 
DateTime TodayTime = DateTime.Now.Date.AddHours(7); 
List<string> fileList = Directory.GetFiles(csvpath, "*.csv").ToList(); 
List<string> FilesInTheRange = new List<string>(); 
DateTime fileTime; 
foreach (string file in fileList) 
{ 
    if (DateTime.TryParseExact(file.Replace(".csv",String.Empty), "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileTime)) 
    { 
     if (fileTime >= yesterdayTime && fileTime <= TodayTime) 
      FilesInTheRange.Add(file); 
    } 
} 

FilesInTheRange 의지가 필요한 파일

+0

am' 그냥 메모, 경우 경우가있다 웹에서 파일을 다운로드 할 때와 같이 파일의 생성 날짜 시간이 변경됩니다. 그러나 그것이 지역적으로 만들어진 파일이라면 문제는 없을 것입니다. –

+0

@이 라이브러리를 사용하려면이 라이브러리를 포함시켜야합니다. CultureInfo.InvariantCulture, DateTimeStyles.None – Jonathan

+0

@Jonathan :'using System.Globalization; –

0

이 검증되지 않은 코드가 포함되어 있지만 TryParseExact를 사용하여 날짜 객체로 파일 이름을 변환하여 시작과 끝 날짜를 기반으로 비교하려는 것입니다.

string dateTimeFormat = "yyyyMMddHHmm"; 
string[] FileList = Directory.GetFiles(csvpath, DateTime.Today.ToString("yyyyMMdd") + "*.csv"); 
int startHour = 19; // 7 PM 
int endHour = 7; // 7 AM 
DateTime startDT = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 

DateTime.Now.Day - 1, startHour, 0, 0); 
DateTime endDT = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, endHour, 0, 0); 
foreach (var fileName in FileList) 
{ 
    DateTime fileDT = DateTime.Min; 
    if(DateTime.TryParseExact(fileName, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyle.None, out fileDT)) 
    { 
     if(fileDT >= startDT && fileDT <= endDT) 
     { 
      \\file process code. 
     }  
    } 
}