2011-12-03 5 views
0

특정 폴더에서 폴링하는 Windows 서비스를 작성하고 있습니다. 디렉토리는 다양한 파일을 포함하고, 각 파일은 이전의 분할 작업에서 유래 :병합 파일 알고리즘

입력 폴더 :

  • FILE_A_PART_1_OF_2.txt
  • FILE_A_PART_2_OF_2.txt
  • FILE_B_PART_1_OF_3.txt
  • FILE_B_PART_2_OF_3.txt
  • FILE _C_PART_2_OF_3.txt
  • FILE_C_PART_3_OF_3.txt
  • FILE_D_PART_1_OF_3.txt
  • FILE_D_PART_3_OF_3.txt
  • FILE_E_PART_1_OF_1.txt

서비스는 단지 전체 파일을 병합 할 수 있어야한다 :

출력 폴더 (병합 작업 후) :

  • FILE_A.txt
  • FILE_E.txt

입력 폴더

  • FILE_B_PART_2_OF_3.txt
  • FILE_C_PART_2_OF_3

    • FILE_B_PART_1_OF_3.txt (병합 동작 이후) .txt
    • FILE_C_PART_3_OF_3.txt
    • FILE_D_PART_1_OF_3.txt
    • FILE_D_PART_3_OF_3.txt

    불행하게도 난 프레임 워크 2.0을 사용합니다. 언어는 C#입니다. 복잡한 알고리즘은 아니지만 어떻게 든 올바른 방향으로 나아갈 수는 없다는 것을 알고 있습니다. 병합 작업은 중요하지 않으므로

    Merge(string[] filesPart) 또는 Merge(List<string> filesPart)과 같이 표현할 수 있습니다.

    미리 감사드립니다.

  • 답변

    2

    먼저, Directory.GetFiles()

    으로, 모든 파일을 잡아 그리고 당신의 주요 도구는 Dictionary<> 클래스가 될 것입니다.당신이 파일 목록을 스캔 이름을 구문 분석하고 저장할 수 있습니다 것

    class BaseFile 
    { 
        public int Total { ... }  
        public List<string> Parts { ... } 
    }  
    
    List<string, BaseFile> baseFiles = ...; 
    

    이 :
    나는 내가 좋아하는 뭔가를 사용하는 것이 생각합니다.
    스캔 후 Total == Parts.Count 일 때만 파일을 처리합니다.

    PART_n_OF_mn이 < 인 경우, List<string> Parts을 간단히 정렬 할 수 있습니다.
    10 이상이 될 수 있으려면 SortedList<int, string> Parts

    과 같은 것이 필요합니다.
    2

    시작하려면 : 입력 파일 목록이 주어지면 예상 출력 파일별로 그룹화하십시오. 그런 다음 각 그룹에 대해 예상 파일 수를 계산하십시오. 그런 다음 각 그룹에 대해 파트가 모두 있는지 확인하십시오. 모든 파트가있는 경우 해당 그룹의 파일을 함께 연결하십시오.