2009-12-29 8 views
6

누구든지 파일을 다운로드하지 않고 (웹 페이지를 열지 않고) Visual Basic 6.0의 디렉토리에 저장하는 방법을 알고 있습니까?파일 다운로드 - VB6

+0

** 단지 4 표를 포함하여 81 개 질문 ** ** –

+1

게시물에 서명을 포함 할 필요가 없습니다. 사용자 카드가 자동으로 추가됩니다. 자세한 내용은 [FAQ] (http://stackoverflow.com/faq#signatures)를 참조하십시오. – Artemix

답변

6

코드를 사용하여 (인터넷 전송 제어 없음) 수행하려는 경우 VBNet.mvps.org에는 URLDownloadToFile API 호출을 사용하는 실제 사용법이 좋은 기사가 있습니다. 문서에서

:

URLDownloadToFile API는 (부문 Win3, WinNT3.x 제외) 윈도우 운영 체제의 모든 버전에 사용할 수 있습니다. 원격 파일 이름과 로컬 파일 경로 및 이름 인 을 전달하면 지정된 비트의 파일을 다운로드하여 대상 이름으로 저장합니다. 이 기능은 모든 파일 형식 와 함께 작동 - 일반 텍스트, 이미지, HTML, MPG, WAV 및 zip 파일 등 파일의 루틴 또는 우려 수정하지 않고 다운로드되는 을하거나 명백한 크기 제한이 또는 한정.

Private Declare Function URLDownloadToFile Lib "urlmon" _ 
    Alias "URLDownloadToFileA" _ 
    (ByVal pCaller As Long, _ 
    ByVal szURL As String, _ 
    ByVal szFileName As String, _ 
    ByVal dwReserved As Long, _ 
    ByVal lpfnCB As Long) As Long 

Private Const ERROR_SUCCESS As Long = 0 
Private Const BINDF_GETNEWESTVERSION As Long = &H10 
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000 

Public Function DownloadFile(sSourceUrl As String, _ 
          sLocalFile As String) As Boolean 

    //'Download the file. BINDF_GETNEWESTVERSION forces 
    //'the API to download from the specified source. 
    //'Passing 0& as dwReserved causes the locally-cached 
    //'copy to be downloaded, if available. If the API 
    //'returns ERROR_SUCCESS (0), DownloadFile returns True. 
    DownloadFile = URLDownloadToFile(0&, _ 
            sSourceUrl, _ 
            sLocalFile, _ 
            BINDF_GETNEWESTVERSION, _ 
            0&) = ERROR_SUCCESS 

End Function 

참고 - 윈도우 7에서 테스트, 그것은 단지 캐시 된 버전을 반환, 그래서 내가 먼저 지우려면 문서에 언급 된 추가 기능을 사용했다 (그리고 그 일을).

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _ 
    Alias "DeleteUrlCacheEntryA" _ 
    (ByVal lpszUrlName As String) As Long 

그런 다음 캐시를 지우려면 먼저 위의 기능을 대상 URL로 호출하십시오.

+3

** API 호출 **이 필요하지 않습니다. ** 인터넷 전송 제어 **가 필요하지 않습니다. 네이티브 VB6 코드를 사용하면 쉽게 할 수 있습니다. http://visualstudiomagazine.com/articles/2008/03/27/simple-asynchronous-downloads.aspx – MarkJ

+0

+1,이 API 호출을 소개해 주셔서 대단히 감사드립니다. –

0

동기식이기 때문에 인터넷 전송 제어를 좋아하지 않습니다. 다운로드를 시작하면 파일을 다운로드하거나 오류가 발생할 때까지 응용 프로그램이 응답하지 않습니다. 비동기 메서드를 작성하려면 WININET DLL을 사용하는 좋은 예가 많이 있습니다. 사소하지는 않지만 매우 능숙합니다. Here는 stackoverflow의 예제입니다.

+0

** ** VB6에서 비동기 다운로드를 수행하는 것은 간단하며 API 호출이 필요하지 않습니다. 내 대답보기 http://stackoverflow.com/questions/1976152/download-file-vb6/1979417#1979417 – MarkJ

6

API 호출이 필요하지 않으므로 인터넷 전송 컨트롤이 필요하지 않습니다. 네이티브 VB6 코드를 사용하면 쉽게 할 수 있습니다. 샘플 코드가있는 article by Karl Peterson이 우수합니다.

+0

전에 본 적이없는 뭔가가있었습니다. 나는 WININET 라이브러리를 사용하여 전체 클래스를 가지고 있으므로 VB에서이 작업을 다시 수행해야한다면 아마 그 작업을 계속할 것입니다.하지만 항상 대안을 가지고있는 것이 좋습니다. – jac

+0

Internet Explorer의 오프라인 속성이 true이면이 기능이 작동하지 않습니다. 파일을 찾을 수 없습니다 오류가 발생합니다. – kjack

-1

이 시도 :

예 :

My.Computer.Network.DownloadFile _ 
("http://www.cohowinery.com/downloads/WineList.txt", _ 
"C:\Documents and Settings\All Users\Documents\WineList.txt") 
+2

이것은 VB.NET처럼 보입니다. 질문은 VB6에 관한 것입니다. –

1

Sub DownloadFile(url, path) 

    Dim objReq 
    Dim objStream 

    Set objReq = CreateObject("MSXML2.XMLHTTP") 
    objReq.Open "GET", url, False 
    objReq.send 

    If objReq.Status = 200 Then 
     Set objStream = CreateObject("ADODB.Stream") 
     objStream.Open 
     objStream.Type = 1 

     objStream.Write objReq.ResponseBody 
     objStream.Position = 0 

     objStream.SaveToFile path, 2 
     objStream.Close 
     Set objStream = Nothing 
    End If 

    Set objReq = Nothing 

End Sub 
을 시도

My.Computer.Network.DownloadFile (*File to download*, *What to save it as*) 

당신은 그것을로 저장하기 위해 무엇을 에서 파일 이름을 부여해야

자세한 내용을 참조하십시오 http://smartreferences.blogspot.in

+0

이 답변에 대한 이유는 알 수 없습니다. 그것은 inet 통제없이 진짜로 작동하는 유일한 응답이다. 도와 주셔서 감사합니다. –