2008-08-20 4 views
12

간헐적 인 연결을 허용하는 Windows 네트워크 공유를 통해 파일을 복사하는 강력한 방법을 찾고 있습니다. 이 응용 프로그램은 대용량 병원의 무선 모바일 워크 스테이션에서 자주 사용되며 연결이 일시적으로 또는 몇 분 동안 한 번에 손실 될 수 있다고 가정합니다. 관련된 파일은 일반적으로 크기가 약 200KB - 500KB입니다. 응용 프로그램은 VB6 (우)로 작성되었지만 Windows DLL 호출을 자주 사용합니다.간헐적 인 네트워크 연결을 통해 파일 복사

감사합니다.

답변

5

실제 문제가 무엇인지 명확하지 않으므로 몇 가지 생각을 던집니다.

  • 재시작 가능 복사본을 원하십니까 (작은 파일 크기로는 큰 거래가 아닐 것 같습니다)? 그렇다면 CopyFileEx with COPYFILERESTARTABLE
  • 확인 가능한 복사본을 원하십니까? 해시를 확인하여 이미 확인한 것 같습니다.
  • 더 나은 성능을 원하십니까? 서버에서 아무 것도 실행할 수없는 것처럼 들리므로 힘들 것입니다. 그렇지 않으면 TransmitFile이 도움이 될 수 있습니다.
  • 화재가 발생하고 작업을 잊어 버리시겠습니까? 나는 robocopy에, 또는 TeraCopy 또는 뭔가 작동 것이라고 포격 - 가정하지만 그것은 조금 해키 것 같습니다.
  • 네트워크가 언제 회복되는지 알고 싶습니까? IsNetworkAlive에 답이 있습니다. 먼저 당신이 성공적으로 복사 한 파일을있는 추적을 저장하는 파일을 압축

    sourceFile = Compress("*.*"); 
    destFile = "X:\files.zip"; 
    
    int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE; 
    while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) { 
        do { 
        // optionally, increment a failed counter to break out at some point 
        Sleep(1000); 
        while (!IsNetworkAlive(NETWORKALIVELAN)); 
    } 
    

    : 내가 지금까지 알고있는 것을 바탕으로

, 나는 다음과 같은 의사 코드 내 방법이 될 것이라고 생각 그리고 다시 시작해야합니다. 또한 복사본을 더 빠르게 만들어야합니다 (전체 파일 크기가 작아지고 단일 파일 크기가 커짐). 양쪽 모두의 CPU 성능이 저하됩니다. 간단한 배치 파일은 서버 측에서 압축 해제 할 수 있습니다.

5

BITS (Background Intelligent Transfer Service)를 사용해보십시오. Windows Update가 사용하는 인프라이며 Win32 API를 통해 액세스 할 수 있으며이 문제를 해결하기 위해 특별히 제작되었습니다.

일반적으로 응용 프로그램 업데이트에 사용되지만 파일 이동 상황에서는 잘 작동합니다.

http://www.codeproject.com/KB/IP/bitsman.aspx

0

어떻게 단순히 파일을 보낸 후 또는 전에 해시를 전송하고, 파일을받은 것을 비교는 어떻습니까? 최소한 올바른 파일이 있는지 확인해야합니다.

모두 나가고 싶다면 같은 과정을 할 수 있지만 파일의 작은 부분은 할 수 있습니다. 다음 모든 조각이있을 때, 그것을 수신단에 가입하십시오.

+0

정확하게 BITS가하는 일입니다. – TheSmurf

13

우수한 결과를 얻기 위해 Robocopy을 사용했습니다. 기본적으로 파일이 검색 될 때까지 30 초마다 다시 시도합니다.

+0

RoboCopy 및 CopyFileEx 제안에 감사드립니다. CopyFileEx는 특히 유망 해 보입니다. 현재 클라이언트 응용 프로그램은 [SHFileOperation] (http://msdn.microsoft.com/en-us/library/bb762164(VS.85) .aspx)을 사용하여 실제 파일 복사를 수행합니다. –

-1

SMS 사용 가능한 경우 작동합니다.

1

솔루션으로 Robocopy에 동의합니다 ...그게 왜 유틸리티는 "강력한 파일 복사"

라고 나는 우수한 결과와 함께이를 위해있는 Robocopy를 사용했습니다. 기본적으로 파일이 검색 될 때까지 30 초마다 다시 시도합니다.

기본적으로 백만 번 재시도 횟수입니다. 그것은 당신의 간헐적 인 연결에 충분해야합니다.

또한 재시작이 가능하며 다른 프로그램이 동일한 연결 (/ IPG 스위치)을 사용함에 따라 모든 대역폭을 사용하지 않으려는 패킷 간 간격으로 전송을 조절할 수도 있습니다.

0

흠, rsync를 그것을 않는 것, 그리고 내가이하는 생각 설치/서버/데몬이 필요하지 않습니다 - 단지 $ rsync를 컴파일합니다 DST를.

관련 문제