2009-09-11 2 views
0

IT 그래서 난 내 일부 내 압축 된 파일 (예 : 엑셀/액세스/TXT를)을 수행하고자하는 파일 서버 이용률을 감소하는 임무되었습니다.C 번호는 - 년 - 월에 따라 폴더에 Autozip 파일은

우리는 수천 개의 파일을 포함하는 일부 폴더가 있으므로 전체 디렉터리를 하나의 큰 파일로 압축하지 않으려합니다. 사용자가 더 쉽게 사용할 수 있도록 여러 개의 작은 파일을 가지는 것이 바람직 할 수 있습니다 그들이 찾고있는 데이터 '버킷'을 찾으십시오.

디렉토리를 읽고 (지퍼에 함께 배치 년 - 월 모든 파일) 년 - 월 그룹으로 파일을 압축하는 C#을 사용하는 방법이 있나요?

아니면 AutoIT와 같은 스크립트를 사용하는 것이 좋을까요?

또는 이미 코드를 작성할 필요가없는 프로그램이 이미 있습니까?

+0

는 유래가 바로이 문의 할 곳 –

+0

에 요청해야한다라고 말하고 싶지만 –

+0

IT 부서에서 NTFS를 사용해야하고 "디스크 공간을 절약하기 위해 내용 압축"을 선택하기 만하면됩니다. –

답변

4

임 귀하의 질문에, 압축하는 특정 연도/월 또는 둘 모두에서 파일을 선택에 관한 것입니다 있는지 확실하지 않습니다. 피터을 압축하는 약

이미 7 - 우편 및 SharpZipLib 언급했다. 나는 개인적으로 후자에 대한 경험 만 가지고 있지만 그 모든 긍정적 인, 쉽게 작업 할 수 있습니다.

은 파일을 그룹화에 대해 그것은이 만든 날짜 또는 마지막으로 수정 한 날짜 중 한 가지 방법으로 폴더 및 그룹을 모든 파일을 반복하여 수행 할 수 있습니다.

의사 :

var files = new Dictionary<DateTime, IList<string>>(); 
foreach (var file in Directory.GetFiles(...)) { 
    var fi = new FileInfo(file); 
    var date = fi.CreatedDate(); 
    var groupDate = new DateTime(date.Year, date.Month); 

    if (!files.ContainsKey(groupDate)) files.Add(groupDate, new Collection<string>()); 

    files[groupDate].Add(file); 
} 

이제 별개 년/월 키와 foreach는 키 해당 그룹에 속하는 파일 목록이 포함 된 사전이 있어야합니다. 그래서 압축에 대한

의사 :

foreach (var entry in files) { 
    var date = entry.Key; 
    var list = entry.Value; 

    // create zip-file named date.ToString(); 
    foreach (var file in list) { 
     // add file to zip 
    } 
} 
나는 그가 정말이에 대한 자신의 프로그램을 만들기를 원하는 경우이 잘에 Serverfault 또는 최초의 슈퍼 유저 ...
2

확실히 당신은 7-zip 또는 SharpZipLib 같은 C 번호의 비트 및 라이브러리와 함께이 작업을 수행 할 수 있습니다.

2

System.IO.Directory.GetFiles()를 사용하여 각 디렉터리의 파일을 반복하고 파일 이름을 구문 분석하여 7-zip 또는 SharpZipLib 개체에 추가 할 수 있습니다. 수천 개의 파일이 있다면 파일 공유에 세금을 부과하지 않도록 하룻밤 사이에 운영되는 일종의 예약 된 작업이나 서비스에 던져 놓는 것이 가장 좋습니다.

행운을 빌어 요!

편집 : 만든 날짜 또는 다른 파일 attirbutes로 구문 분석해야하는 경우 각 파일에 System.IO.FileInfo 개체를 사용할 수 있습니다.

+0

+1 디스크를 I/O 상태를 낮게 유지하기 위해 매 순간 몇 개의 Sleep이있는 우선 순위가 낮은 스레드 일 수 있습니다. 나는 (개인적으로) 좋은 C# 연습 (SharpZipLib을 다운로드 한 후에 15 분 이상 걸리지 않아야 함)이므로 타사 솔루션을 사용하는 대신 코딩을 선호합니다. :) – Groo