2014-05-01 4 views
0

현재 폴더에서 파일을 선택하여 처리하는 응용 프로그램이 있습니다. 간단하지만 충분히 중요한 두 가지 문제가 있습니다. 처리는 단순히 이미지를 base64 문자열로 변환하여 데이터베이스에 저장하는 것입니다.파일 처리 중 - 보관 중

문제

문제는 파일이 처리 된 후, 다시 처리를 필요로하지 않으며 성능 향상을 위해 우리가 정말 그렇게되고 싶지 않아합니다.

처리 후에도 파일을 이동하는 것은 옵션이 아닙니다. 이러한 이미지 파일은 시스템의 다른 부분에서 항상 동일한 디렉토리에서 사용할 수 있어야하기 때문입니다.

이 프로그램은 이미 이것을 사용하는 제품의 확장이기 때문에 VB.NET으로 작성해야합니다.

이상적인 솔루션

는 우리가 정말 찾고있는 것은 파일 그래서 우리는 응용 프로그램을 실행할 때 무시 목록의 종류를 개발할 수 처리 된있는 트랙을 유지하는 방법입니다.

+2

데이터베이스, xml 파일. – Steve

+0

당신은 무엇을 시도 했습니까? 필자는 파일 이름을 데이터베이스 테이블이나 로컬 파일 (시스템에서 읽기 쉬운 형식)에 저장해야하며 런타임에는 파일 이름 이미 목록에 ... – Rex

+0

이전에 해본 적이 있다면 간단 할 것입니다. 권자 –

답변

1

모든 처리 된 이미지 파일 Image0001.ext에 대해 처리가 완료되면 Image0001.ext.done 두 번째 파일을 만듭니다. 처리 할 파일을 찾을 때 이미지의 확장 유형에 필터를 사용하고 각 파일 이름을 찾을 때 .done 파일이 존재하는지 확인하십시오.

이 방법은 파일 수가 늘어남에 따라 점진적으로 느려지지만 파일을 이동 (또는 삭제)하지 않으면 피할 수 없습니다. NTFS에서는 수만 개의 파일에 잘 들어갈 때까지 OK 여야합니다.

편집 : 이미지의 큰 숫자가 될 수 없습니다 따라서

  1. 모든 것이 하나 개의 폴더에 있습니다 : 내 접근 방식은 KISS 적용하는 것 나는 시간마다 시간당 수백 개의 파일을 처리 할 필요가 없습니다 매일 (첫 번째 실행은 다를 수 있음).

  2. 콘솔 응용 프로그램을 작성하여 명령 줄에서 전달 된 하나의 파일을 변환합니다. 운동으로 남았습니다.

  3. 변환의 시급함을 나타내는 징후가 없습니다. 15 분마다 실행되도록 예약 할 수 있습니다 (말하십시오). 또한 운동으로 남았습니다. 당신이 더 할 필요가있는 경우 파일 이름, 파일 크기, (그리고 파일 해시를 저장하는 테이블에서

    cd $TheImageFolder; 
    # .png assumed as image type. Can have multiple filters here for more image types. 
    Get-Item -filter *.png | 
        Where-Object { -not (Test-File -path ($_.FullName + '.done') } | 
        Foreach-Object { ProcessFile $_.FullName; New-Item ($_.FullName + '.done') -ItemType file } 
    
2

:

  • 사용 PowerShell은 이미 처리되지 않은 모든 이미지에 대한 프로그램을 실행하려면 각 파일에 대해 처리해야합니다. 이제 새 파일을 처리 할 때 테이블 항목과 비교할 수 있습니다 (간단한 쿼리로 수행 할 수 있음). 해시를 사용하면 성능이 저하 될 수 있지만 이미 처리 된 파일에 대해서는 조금 더 확신 할 수 있습니다.