2014-05-21 2 views
1

URLDownload를 사용하여 파일을 다운로드하고 5 개의 파일 (zip)을 다운로드하고 그 중 2 개가 손상되었으며 첫 번째 파일을 다시 다운로드 (2-3 회)하려고 시도하고 두 번째로 작동합니다 한 20 (시간) stiil dameged 후, 그것은 그것이 끝나기 전에 다운로드를 중지하는 것 같습니다.URLDownloadToFile 파일의 반을 다운로드 중

손상된(내가 수동으로이 파일을 다운로드 및 오픈 벌금 및 크기 75킬로바이트, 당신은 차이를 볼하고 전체 다운로드 \ 손상되지 것을 알고 뿌리 11킬로바이트 한 내가 URLDownload에서 다운로드 한 파일을 압축)

내 코드

[DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)] 
static extern Int32 URLDownloadToFile(Int32 pCaller, string szURL, string szFileName, Int32 dwReserved, Int32 lpfnCB); 

int response = URLDownloadToFile(0, Link, FilePath, 0, 0); 

     if (response == 0) 
     { 
     lsUtils.WriteToLog("File " + FileName + " downloaded.", true); 
     int zipTry = 10; 
     if (!isValidZip(FilePath)) 
       { 
    clsUtils.WriteToLog("Attempting to re-download damaged file " + FileName, true); 
    while (!isValidZip(FilePath) && zipTry > 1) 
     { 
    clsUtils.WriteToLog("File " + FileName + " Zip file damaged.", true); 
    response = URLDownloadToFile(0, Link, FilePath, 0, 0); 
              zipTry--; 

             } 
            } 
+3

WebClient를 사용하지 않는 이유는 무엇입니까? 이 파일 – Ksv3n

+1

은 로그인/암호 후 은행 사이트에, 난 그냥 URL을 삽입하고이 파일을 다운로드 할 수 있습니다. 내가 4.0을 사용하고 – user3567884

답변

0

왜 URLDownloadToFile를 사용합니까? 이는 .NET에서 파일을 다운로드하는 방법과 매우 흡사합니다.

대신, 여기 4.5+ .NET에서 간단한 예제 : 당신이 .NET 4.5 이상이없는 경우

async Task DownloadAndSaveAsync(string url, string filePath) 
{ 
    HttpClient client = new HttpClient(); 
    var response = await client.GetAsync(url); 

    // Was the request successful? 
    if (response == null || !response.IsSuccessStatusCode) return; 

    using (var file = File.Create(filePath)) 
    { 
     await response.Content.CopyToAsync(file); 
    } 
} 

, 당신은 HttpWebRequest를 사용해야 할거야,하지만 여전히보다 훨씬 낫다 P/Invoke를하고 있습니다.

원래 URLDownloadToFile 문제에 관해서는 차단이되지 않았으므로 zip이 유효한지 확인한 다음 백그라운드에서 다운로드 중이므로 두 번째 시도 등으로 덮어 쓰게됩니다. 따라서 다운로드를 거치지는 않습니다. 오래 기다릴 필요가 없습니다. 그러나 다시 한번, 그것은 단지 추측입니다. 정말로 필요하지 않으면 Internet Explorer에서 종속성을 작성하면 안됩니다.

+0

(내가이 일을 dosn't 시도), 그리고 난 HttpWebRequest를이 때문에 작동하지 않습니다 생각할 수 없다 파일은 로그인/비밀번호를 입력 한 후 은행 사이트에 있습니다. 다운로드를 시작하기 전에 쿠키 + 권한이 있어야합니다. URL을 삽입하고이 파일을 다운로드 할 수 없습니다. – user3567884

+0

@ user3567884 글쎄, 쿠키와 자격 증명을'HttpWebRequest'에서도 사용할 수 있습니다. 어쨌든, IE에 따라 다운로드를 수행하는 것은 아마도 최상의 사용법은 아닙니다 (IE의 보안 구멍이라고 할 수 있습니다). 그러나 당신이 그것을 고집하고 싶다면 콜백 메소드를 사용하여 파일이 언제 실제로 다운로드되었는지 알 수 있습니다. 비동기 적으로 다운로드되므로 검사 할 때 다운로드가 완료되지 않았을 가능성이 큽니다. 콜백 ('lpfnCB')은 그 일이 언제 일어날 지 알려줍니다. 내가 틀렸다면. 그러나 쉽게 시도 할 수 있습니다. 메소드를 실행하고 파일을 검사하기 전에 잠시 기다려주십시오. – Luaan

+0

당신은 저를 VS 2012 설치로 만들었습니다 : bey bey vs 2010 – user3567884

관련 문제