newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
오늘
어제
  • 분류 전체보기 (392)
    • Dev (214)
      • C, C++ (43)
      • Go (5)
      • Web (49)
      • DBMS (21)
      • DevOps (8)
      • Java (2)
      • Windows, Win32 (4)
      • Visual Basic (5)
      • C# (2)
      • Mobile (25)
      • SQL CE (7)
      • Google Map (6)
      • Python (2)
      • cygwin (2)
      • 기타 (32)
      • Ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
05-18 11:12
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Dev/C, C++

Http프로토콜을 이용한 파일 다운로드

2003. 1. 23. 18:12
//-------------------------------------------------------------------------------------//  
// Function    : GetFile  
// Parameter: LPCTSTR url, LPCTSTR filename  
// Return    : CString              
//            - 성공하면 "YES" 실패하면 에러메시지를 반환  
// Note        : url의 파일을 받아서 filename에 저장한다.  
//            LPCTSTR url      - http프로토콜을 이용해 받아올 파일의 전체경로  
//            LPCTSTR filename - 파일을 저장할 local경로  
//-------------------------------------------------------------------------------------//  
CString CInternetImageCtrl::GetFile(LPCTSTR url, LPCTSTR filename)  
{  
  HINTERNET hInternet, hURL;  

  // 연결  
  hInternet = InternetOpen( L"HTTPFILE", INTERNET\_OPEN\_TYPE\_PRECONFIG, NULL, NULL, 0);  

  if ( hInternet == NULL )  
     return L"인터넷이 연결되어 있지 않습니다.";  

// url  
  hURL = InternetOpenUrl( hInternet, url, NULL, 0, INTERNET\_FLAG\_RELOAD, 0);  
  if ( hURL==NULL )  
  {  
     InternetCloseHandle( hInternet );  
     return L"서버오류로 연결할 수 없습니다.";  
  }  

  // 연결정보 확인  
  TCHAR szStatusCode\[10000\];  
  DWORD dwInfoSize = 10000;  
  HttpQueryInfo(hURL, HTTP\_QUERY\_STATUS\_CODE, szStatusCode, &dwInfoSize, NULL);  


  long nStatusCode = \_ttol(szStatusCode);  
  if (nStatusCode == HTTP\_STATUS\_OK)  
  { // 정상  

     //  local file 생성  
     HANDLE hFile;  
     hFile = CreateFile( filename, GENERIC\_WRITE, 0, NULL,  
                         CREATE\_ALWAYS, FILE\_ATTRIBUTE\_NORMAL, NULL );  

     DWORD size;  
     DWORD dwRead, dwWritten; //, Recv=0;  
     char\* buf = NULL;  

     do  
     {  
        InternetQueryDataAvailable( hURL, &size, 0, 0 );  
        buf = new char\[size\];  
        InternetReadFile( hURL, buf, size, &dwRead );  

        WriteFile( hFile, buf, dwRead, &dwWritten, NULL );  
        delete buf;  

     } while ( dwRead != 0 );  

     CloseHandle( hFile );  

  }  
  else if (nStatusCode == HTTP\_STATUS\_NOT\_FOUND)  
  { // 404에러  
     InternetCloseHandle( hInternet );  
     InternetCloseHandle( hURL );  
     return L"그림이 준비되지 않았습니다";  
  } else  
  { // 그외의 에러..  
     InternetCloseHandle( hInternet );  
     InternetCloseHandle( hURL );  
     CString str;  
     str.Format( L"Unknown Error  
Err code : %d", nStatusCode);  
     return str;  
  }  

  InternetCloseHandle( hInternet );  
  InternetCloseHandle( hURL );  

  return L"YES";  
}  
반응형

'Dev > C, C++' 카테고리의 다른 글

MFC에서 타이틀 변경은 어떻게 하나요?  (1) 2003.02.06
MFC용 ADO클래스  (0) 2003.02.06
Http프로토콜을 이용한 파일 업로드  (2) 2003.01.18
EVC에서 다이얼로그에서 메인프레임의 타이틀 바꾸기..  (2) 2002.12.30
컴파일시 꼬이는 헤더파일 방지..  (2) 2002.12.21
    'Dev/C, C++' 카테고리의 다른 글
    • MFC에서 타이틀 변경은 어떻게 하나요?
    • MFC용 ADO클래스
    • Http프로토콜을 이용한 파일 업로드
    • EVC에서 다이얼로그에서 메인프레임의 타이틀 바꾸기..
    newtype
    newtype
    지극히 개인적인 지식의 창고

    티스토리툴바