ȍ. FTP ˜ˌ

FTP ÇÁ·ÎÅäÄÝÀº HTTP¿Í´Â ´Þ¸® ¾÷·Îµå¸¦ Áö¿øÇÑ´Ù. ´Ù¿î·Îµå¹ÞÀº ÆÄÀÏÀ» ÆíÁýÇÑ ÈÄ ÀÌ ÆÄÀÏÀ» ´Ù½Ã FTP ¼­¹ö·Î º¸³¾ ¼ö Àִµ¥ ±×·¡¼­ FTP´Â À¥ ¼­¹öÀÇ ÆÄÀÏ ÆíÁý¿ëÀ¸·Î ¾ÆÁÖ À¯¿ëÇÏ°Ô È°¿ëµÈ´Ù. ´ç±ÙÀº FTP ¾÷·Îµå¸¦ À§ÇÑ º°µµÀÇ ¸í·ÉÀ» Á¦°øÇÏÁö ¾ÊÀ¸¸ç ÆÄÀÏ ÀúÀå ¸í·É¿¡ ¾÷·Îµå ±â´ÉÀ» ÅëÇÕÇϱâ·Î ÇÑ´Ù. ±×·¡¼­ ·ÎÄà ÆÄÀÏÀ̵ç, FTP·Î ´Ù¿î·Îµå¹ÞÀº ÆÄÀÏÀ̵ç À§Ä¡¿¡ »ó°ü¾øÀÌ ÀúÀå ¸í·ÉÀ¸·Î º¯°æ ³»¿ëÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Ù.

FTP ¾÷·Îµå´Â °á±¹ ¿ø°ÝÁöÀÇ ¼­¹ö·Î ÆÄÀÏÀ» ÀúÀåÇÏ´Â °ÍÀ̹ǷΠÀúÀå ¸í·ÉÀ¸·Î ¾÷·Îµå¸¦ ÇÏ´Â °ÍÀº ³í¸®ÀûÀ¸·Î ÇÕ´çÇÏ´Ù. »ç¿ëÀÚ´Â ÆÄÀÏÀ» ¾î¶»°Ô ¿­¾ú´Â°¡¿¡ »ó°ü¾øÀÌ ÀúÀå ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÏ°üµÈ ¸í·ÉÀ¸·Î ÆÄÀÏÀ» °ü¸®ÇÒ ¼ö ÀÖÀ¸¸ç ¾÷·Îµå¸¦ À§ÇØ º°µµÀÇ Á¢¼ÓÁ¤º¸¸¦ ´Ù½Ã Á¦°øÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â Á¡¿¡¼­ ¾ÆÁÖ ÁÁÀº °Í °°´Ù. ¾÷·Îµå°¡ ÀúÀå°ú ÅëÇյǹǷΠ¼öÁ¤ÇØ¾ß ÇÒ ÇÔ¼ö´Â SaveToFileÀÌ´Ù. ¾÷·Îµå¸¦ À§ÇÑ Äڵ尡 Ãß°¡µÇ°í ÄÚµåÀÇ ¼ø¼­µµ ¾à°£ ¹Ù²î¾ú´Ù.

 

BOOL SaveToFile(HWND hChild,TCHAR *Path)

{

     HANDLE hFile;

     DWORD dwWritten;

     int len;

     TCHAR *TextBuf;

     SInfo *pSi=(SInfo *)GetWindowLong(hChild,0);

     DWORD err;

     TCHAR Mes[512];

     BOOL Result;

     TCITEM tie;

     int idx;

 

     if (strnicmp(Path,"http",4)==0) {

          MessageBox(hChild, "HTTP ÇÁ·ÎÅäÄÝÀº ¾÷·Îµå¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÌ À̸§À¸·Î´Â "

              "ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù. »õ À̸§À¸·Î ÇÏµå µð½ºÅ©¿¡ ÀúÀåÇϽʽÿÀ","¾Ë¸²",MB_OK);

          return FALSE;

     }

 

     len=pSi->Ae.GetTextLength();

     TextBuf=(TCHAR *)malloc(len+2);

     pSi->Ae.GetText(TextBuf,len+2);

 

     if (strnicmp(Path,"ftp",3)==0) {

          Result=DgFtpUp(Path,TextBuf);

     } else {

          hFile=CreateFile(Path,GENERIC_WRITE,0,NULL,

              CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

          if (hFile==INVALID_HANDLE_VALUE) {

              err=GetLastError();

              switch (err)

              {

              case ERROR_ACCESS_DENIED:

                   wsprintf(Mes,"%s ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. ÀбâÀü¿ë µîÀÇ ÀÌÀ¯·Î "

                        "¾×¼¼½º°¡ ±ÝÁöµÇ¾î ÀÖ½À´Ï´Ù.",Path);

                   break;

              case ERROR_SHARING_VIOLATION:

                   wsprintf(Mes,"%s ÆÄÀÏÀ» ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù.",Path);

                   break;

              case ERROR_WRITE_PROTECT:

                   wsprintf(Mes,"±â·Ï ±ÝÁöµÈ ÀåÄ¡ÀÔ´Ï´Ù.");

                   break;

              default:

                   wsprintf(Mes,"¾Ë¼ö ¾ø´Â ¿¡·¯ÀÔ´Ï´Ù. °³¹ßÀÚ¿¡°Ô ¹®ÀÇÇÏÁö ¸¶½Ã°í "

                        "¾Ë¾Æ¼­ ÇØ°áÇϽʽÿÀ. ¿¡·¯ ÄÚµå=%d",err);

                   break;

              }

              MessageBox(g_hFrameWnd, Mes,"¾Ë¸²",MB_OK);

              Result=FALSE;

          } else {

              WriteFile(hFile,TextBuf,len,&dwWritten,NULL);

              CloseHandle(hFile);

              Result=TRUE;

          }

     }

 

     if (Result) {

          lstrcpy(pSi->NowFile,Path);

          pSi->Ae.SetModified(FALSE);

          tie.mask=TCIF_IMAGE;

          tie.iImage=0;

          idx=FindFileTab(pSi->NowFile);

          TabCtrl_SetItem(hFileTab,idx,&tie);

     }

     free(TextBuf);

     return Result;

}

 

ÀúÀåÇÒ ÆÄÀÏ °æ·ÎÀÇ ¾Õ ¼¼ÀÚ°¡ ftpÀÌ¸é ¿ø°ÝÁö·Î ¾÷·Îµå¸¦ ÇØ¾ß Çϸç DgFtpUp ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ·ÎÄà ÆÄÀÏÀ̹ǷΠÆò»ó½Ã¿Í °°ÀÌ ±×³É ÀúÀåÇÏ¸é µÈ´Ù. FTP ¼­¹ö·Î ÆÄÀÏÀ» ¾÷·ÎµåÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.

 

BOOL DgFtpUp(TCHAR *Path, TCHAR *Text)

{

     HINTERNET hRemote;

     DWORD FileSize,Size, RemSize;

     DWORD dwWritten;

     BOOL Result=FALSE;

     TCHAR Server[256];

     TCHAR User[32];

     TCHAR Pass[32];

     TCHAR Dir[MAX_PATH];

     int Port;

     TCHAR *p,*p2;

     MSG msg;

     TCHAR Mes[400];

     HWND hDlgDown;

 

     bContDown=TRUE;

     hDlgDown=CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_DOWNLOAD),

          g_hFrameWnd, (DLGPROC)DGDownProc);

     SetDlgItemText(hDlgDown,IDC_STDOWN1,"ÀÎÅÍ³Ý Á¢¼ÓÁß...");

     SetWindowText(hDlgDown,"FTP ¾÷·Îµå");

     ShowWindow(hDlgDown,SW_SHOW);

     UpdateWindow(hDlgDown);

     EnableWindow(g_hFrameWnd, FALSE);

 

     ParseFtpInfo(Path,Server,User,Pass,p,Port);

     if (DgFtpConnect(Server,User,Pass,Port)==FALSE) {

          MessageBox(g_hFrameWnd, "FTP ¾÷·Îµå¸¦ À§ÇØ ÀÎÅͳݿ¡ Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù","¾Ë¸²",MB_OK);

          goto NetFail;

     }

 

     for (;;) {

          p2=strchr(p,¡¯/¡¯);

          if (p2==NULL) {

              break;

          }

          lstrcpyn(Dir,p,p2-p+1);

          if (FtpSetCurrentDirectory(hFtp,Dir)==FALSE) {

              MessageBox(g_hFrameWnd,"FTP ¼­¹ö¿¡¼­ Æú´õ¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);

              goto EndUp;

          }

          p=p2+1;

     }

 

     hRemote=FtpOpenFile(hFtp,p,GENERIC_WRITE,FTP_TRANSFER_TYPE_BINARY,0);

     if (hRemote == NULL) {

          MessageBox(g_hFrameWnd,"FTP ¼­¹ö¿¡¼­ ÆÄÀÏÀ» ãÀ» ¼ö ¾ø°Å³ª ¾²±â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);

          goto EndUp;

     }

 

     wsprintf(Mes,"À§Ä¡ : %s",Path);

     SetDlgItemText(hDlgDown,IDC_STDOWN1,Mes);

 

     p=Text;

     FileSize=RemSize=lstrlen(Text);

     for (;;) {

          Size=min(10000,RemSize);

          if (Size==0) {

              Result=TRUE;

              break;

          }

          Result=InternetWriteFile(hRemote,p,Size,&dwWritten);

          if (Result==FALSE) {

              MessageBox(g_hFrameWnd, "FTP ¼­¹ö¿¡ ÆÄÀÏÀ» ¾µ ¼ö ¾ø½À´Ï´Ù","¾Ë¸²",MB_OK);

              break;

          }

          if (bContDown==FALSE) {

              Result=FALSE;

              break;

          }

          p+=dwWritten;

          RemSize-=dwWritten;

          SendMessage(hDlgDown,WM_USER+1,(WPARAM)(p-Text),(LPARAM)FileSize);

          while (PeekMessage(&msg, NULL,0,0,PM_REMOVE)) {

              if (!IsDialogMessage(hDlgDown, &msg)) {

                   TranslateMessage(&msg);

                   DispatchMessage(&msg);

              }

          }

     }

 

     InternetCloseHandle(hRemote);

EndUp:

     DgFtpUnConnect();

NetFail:

     EnableWindow(g_hFrameWnd, TRUE);

     DestroyWindow(hDlgDown);

     return Result;

}

 

ÀúÀåÇÒ ÆÄÀÏ °æ·Î Path¿¡ Á¢¼ÓÁ¤º¸°¡ ÀÖÀ¸¹Ç·Î ParseFtpInfo ÇÔ¼ö·Î ÀÌ Á¤º¸¸¦ ÃßÃâÇÏ¿© ¼­¹ö¿¡ Á¢¼ÓÇÑ´Ù. ±×¸®°í ÆíÁýÁßÀÎ ¹®¼­¸¦ ¾÷·ÎµåÇϱ⸸ ÇÏ¸é µÈ´Ù. ¾ÖÃÊ¿¡ ÆÄÀÏ ÀÚü¸¦ ´Ù¿î·Îµå¹ÞÁö ¾Ê¾ÒÀ¸¹Ç·Î ¾÷·Îµå ´ë»óÀº ÆÄÀÏÀÌ ¾Æ´Ï¶ó ÆÄÀÏ ¼ÓÀÇ µ¥ÀÌÅÍÀÌ´Ù. ´ç±ÙÀº ¿ø°ÝÁöÀÇ ÆÄÀÏ ÆíÁýÀ» À§ÇØ º°µµÀÇ Àӽà ÆÄÀÏÀ» ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ ÇÔ¼ö°¡ Á¦´ë·Î µ¿ÀÛÇÏ·Á¸é Á¢¼ÓÇÑ FTP ¼­¹ö¿¡ ¾²±â ±ÇÇÑÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.