2010-12-07 7 views
0

그래서 교육용으로 내 다운로드 관리자를 개발 중입니다. 파일을 다운로드하는 여러 연결/스레드가 있으며 각 연결은 파일의 특정 범위에서 작동합니다. 이제는 그들이 모두 청크를 가져온 후에,이 청크를 함께 가져 와서 원본 파일을 다시 만드는 방법을 정확히 알지 못합니다.다운로드 관리자 : 여러 연결로 가져온 청크를 다시 만드는 방법

내가 무슨 짓을 :

첫째, 나는 'WB'모드에 임시 파일을 생성하고, 자신의 덩어리를 덤프하기 위해 각 연결/스레드를 허용했다. 그러나 연결이이를 수행 할 때마다 이전에 저장된 덩어리를 덮어 씁니다. 나는 'wb'파일 기술자를 사용했기 때문에 이것이라고 생각했습니다. 나는 'AB'로 변경,하지만 난 더 이상 내가 찾던() 작업

추구하지 수행 할 수 있습니다

내가 원본 파일이 덩어리를 재 - 포장의 우아한 방법이 필요합니다. 다른 다운로드 관리자가 어떻게하는지 알고 싶습니다.

감사합니다.

답변

1

seek()write()과 같이 잘하고 있습니다. 그게 효과가있어!

많은 수의 스레드가 파일 전체를 움직이지 않고도 더 깨끗한 구조를 원할 경우 다운로더 스레드와 디스크 쓰기 스레드가있는 것이 좋습니다. 이 마지막 하나는 다른 사람들이 깨우고 디스크에 kb를 쓰고 잠자기 상태로 돌아갈 때까지 잠을 잘 수 있습니다.

+0

고맙습니다. 당연히 PC 사용이 100 %로 유지되는 것은 당연합니다. 스레드가 지속적으로 잠금을 획득하고 다운로드 할 때마다 20KB를 절약하기 때문에 이것이라고 생각합니다. 감사합니다 – Kennedy

2

다른 임시 파일을 청크로 작성한 다음 원래 순서대로 결합해야합니다. 모든 스레드에 대해 하나의 파일을 열면 스레드가 이전 스레드를 기다려야하기 때문에 스레드 사용을 버리는 데이터 순서를 수정하지 않고 순차적으로 액세스해야합니다. 당신은 wb 모드에서 파일을 열어야합니다.

+0

고마워요. 특히 스레드 사용 부분. 스레드는 잠금이 해제되어 응용 프로그램이 느려질 때까지 대기합니다. 감사 – Kennedy