프로그래밍/C/C++2007. 6. 8. 23:48

출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=4002&ref=1340

 

간단하게. 웹에 있는 파일크기를 알아오는 함수임다...

서버에 파일이 없거나 하면,,, -1을 리턴합니다...

 

WININET.LIB를 프로젝트에 넣으면 사용하실수 있습니다.

 

#include <afxinet.h>

DWORD GetUrlFileLength (CString url)

{

DWORD filesize;

 

     TCHAR   szCause[255];

     CString CauseOfError;

      TRY

     {

CInternetSession session;

CHttpFile *remotefile= (CHttpFile*)session.OpenURL(url,1,INTERNET_FLAG_TRANSFER_BINARY);

               TCHAR szContentLength[32];

               DWORD dwInfoSize = 32;

               DWORD dwFileSize = 0;

               BOOL bGotFileSize = FALSE;

               if (remotefile->QueryInfo ( HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize , NULL))

               {

                   bGotFileSize = TRUE;

                   dwFileSize = (DWORD) _ttol(szContentLength);

                   filesize = dwFileSize;// Return 값에 할당.

               }

               else

               { // 에러나 나서 파일이 없을경우에

                    filesize = -1 ;

               }

           remotefile->Close ();

          session.Close ();

     }

 

     CATCH_ALL(error)

     {

         AfxMessageBox ("서버로부터 파일 크기를 얻어오는 과정에서 에러발생");

          error->GetErrorMessage(szCause,254,NULL);

          CauseOfError.Format("%s",szCause);

          AfxMessageBox (CauseOfError);

     }

     END_CATCH_ALL;

 

return filesize;

}

Posted by 시난

댓글을 달아 주세요