FTP ¿±â ´ëÈ»óÀÚ´Â FTP·ÎºÎÅÍ ´ë»ó ÆÄÀÏÀÇ À̸§À» Á¶»çÇÒ »ÓÀÌÁö Á÷Á¢ ÆÄÀÏÀ» ¿©´Â °ÍÀº ¾Æ´Ï´Ù. FTP ÆÄÀÏÀº ÀÌ ´ëÈ»óÀÚ¿¡¼»Ó¸¸ ¾Æ´Ï¶ó MRU³ª ÇÁ·ÎÁ§Æ®¿¡¼µµ ¿ ¼ö ÀÖ¾î¾ß ÇϹǷΠ°á±¹Àº OpenFromFile ÇÔ¼ö¿¡ ÀÇÇØ ¿·Á¾ß ÇÑ´Ù. ´Ü¼øÈ÷ ÆÄÀÏÀÇ À̸§À» ¾ò´Âµ¥ Àú·¸°Ô ¸¹Àº Äڵ尡 ÇÊ¿äÇÑ ÀÌÀ¯´Â FTP ¼¹öÀÇ Æú´õ ±¸Á¶¸¦ º¸¿©ÁÖ°í Æú´õ¸¦ ¹Ù²Ü ¼ö ÀÖµµ·Ï ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.
ÀÌ ´ëÈ»óÀÚÀÇ °á°ú¹°Àº °á±¹ ÆĶó¹ÌÅÍ·Î ¸®ÅϵǴ ¿ø°ÝÁöÀÇ ÆÄÀÏ °æ·Î»ÓÀÌ´Ù. ÀÌ °æ·Î´Â ´ÙÀ½ Çü½ÄÀ¸·Î ÀÛ¼ºµÇ´Âµ¥ °æ·Î¸í¿¡ Á¢¼ÓÁ¤º¸¿Í ÆÄÀÏÀÇ À§Ä¡, ÆÄÀÏÀÇ À̸§±îÁö ¿Ïº®ÇÑ Á¤º¸°¡ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é FTP ÆÄÀÏÀ» ¿ ¶§¸¶´Ù Á¢¼ÓÁ¤º¸¸¦ ¹°¾î¾ß ÇÒ °ÍÀ̸ç ÀÏ°üµÈ ¹æ¹ýÀ¸·Î ÆÄÀÏ ÀÔÃâ·ÂÀ» ÇÒ ¼ö°¡ ¾ø´Ù.
ftp://»ç¿ëÀÚ¸í:ºñ¹Ð¹øÈ£:¼¹ö:Æ÷Æ®/Æú´õ/ÆÄÀÏ
´ç±ÙÀÌ Á¤ÀÇÇÏ´Â ÀÌ °æ·Î Æ÷¸ËÀº Ç¥ÁØÈµÈ FTP °æ·Î ÁöÁ¤¹ýÀº ¾Æ´Ï¸ç µ¶ÀÚÀûÀ¸·Î Á¤ÀÇÇÑ °ÍÀÌ´Ù. »ç½Ç FTP °æ·Î¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀÌ ÀÖ±â´Â ÇÏÁö¸¸ ´ç±ÙÀÇ °æ¿ì¿Í´Â ¸ÂÁö ¾Ê´Â °Í °°¾Æ °íÀ¯ÀÇ °æ·Î Ç¥Çö¹ýÀ» ¸¸µé¾ú´Ù. ¾îÂ÷ÇÇ ´ç±ÙÀÌ ¸¸µç °æ·ÎÀÌ°í ´ç±Ù¸¸ »ç¿ëÇϹǷΠǥÁØÀÌ ¾Æ´Ï¶óµµ Å« »ó°üÀº ¾ø´Ù.
OnCommand¿¡¼´Â FTP ¿±â ´ëÈ»óÀÚ¸¦ È£ÃâÇ쵂 ÆĶó¹ÌÅÍ·Î ¹®ÀÚ¿ ¹öÆÛ¸¦ Á¦°øÇϸç ÀÌ ¹öÆÛ¿¡ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ FTP ÆÄÀÏÀÇ °æ·Î°¡ ¸®ÅϵȴÙ. ÀÌ °æ·Î¸¦ OpenFromFile ÇÔ¼ö·Î ³Ñ°ÜÁֱ⸸ ÇÏ¸é »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆÄÀÏÀ» Áï½Ã ¿ ¼ö ÀÖ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_FILE_FTPOPEN:
if (DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_FTP),
g_hFrameWnd, DGFtpProc,(LPARAM)Path)==IDOK) {
if (lstrlen(Path)) {
OpenFromFile(Path);
}
}
break;
OpenFileToChild ÇÔ¼ö´Â FTP ÆÄÀÏÀ» ´Ù·ê ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°ÀÌ ±â´ÉÀÌ È®ÀåµÈ´Ù.
BOOL OpenFileToChild(HWND hChild, TCHAR *Path)
{
....
if (strnicmp(Path,"http",4) == 0) {
dwSize=DgHttpDown(Path,TextBuf);
if (dwSize==-1) {
return FALSE;
}
} else if (strnicmp(Path,"ftp",3) == 0) {
dwSize=DgFtpDown(Path,TextBuf);
if (dwSize==-1) {
return FALSE;
}
} else {
ÆÄÀϸíÀÇ ¾Õ 3ÀÚ°¡ ftp·Î ½ÃÀ۵Ǹé FTP ÆÄÀÏ·Î ÀνÄÇÏ°í DgFtpDown ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þµµ·Ï ÇÑ´Ù. HTTP·Î ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ´Â °úÁ¤°ú À¯»çÇ쵂 ´Ù¿î·Îµå¸¦ ¹Þ¾ÆÁÖ´Â ÇÔ¼ö¸¸ ´Þ¶óÁ³À» »ÓÀÌ´Ù.
ÀÌÁ¦ ´ÙÀ½ ÇÒ ÀÏÀº FTP ´Ù¿î·Îµå ÇÔ¼öÀÎ DgFtpDown ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀε¥ ±× Àü¿¡ FTP °æ·Î·ÎºÎÅÍ FTP Á¢¼ÓÁ¤º¸¸¦ ÃßÃâÇØ ³»´Â ÇÔ¼ö¸¦ ¸ÕÀú ¸¸µé¾î¾ß ÇÑ´Ù. WinInet ¶óÀ̺귯¸®°¡ ´ç±ÙÀÌ Á¤ÀÇÇÏ°í ÀÖ´Â FTP °æ·Î Æ÷¸ËÀ» ÀÌÇØÇÏÁö ¸øÇϱ⠶§¹®¿¡ ÀÏ´Ü Á¢¼ÓÁ¤º¸¸¦ ÃßÃâÇÏ¿© Á¢¼ÓÇÑ ÈÄ Æú´õ °æ·Î¸¦ ã¾Æ°¡¼ ÆÄÀÏÀ» Àоî¿Í¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ÇÁ·ÎÁ§Æ® Àüü¿¡ °ÉÃÄ »ç¿ëµÇ¹Ç·Î Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
void ParseFtpInfo(TCHAR *Path, TCHAR *Server, TCHAR *User, TCHAR *Pass, TCHAR *& File, int &Port)
{
TCHAR *p,*p2;
p=Path+6;
p2=strchr(p,¡¯:¡¯);
lstrcpyn(User,p,p2-p+1);
p=p2+1;
p2=strchr(p,¡¯:¡¯);
lstrcpyn(Pass,p,p2-p+1);
p=p2+1;
p2=strchr(p,¡¯:¡¯);
lstrcpyn(Server,p,p2-p+1);
Port=atoi(p2+1);
File=strchr(p2+1,¡¯/¡¯)+1;
}
Path¿¡¼ ÄÝ·ÐÀ¸·Î ±¸ºÐµÈ °¢°¢ÀÇ ÅäÅ«À» ºÐ¸®ÇÏ¿© ¼¹ö ÁÖ¼Ò, »ç¿ëÀÚ ID, ºñ¹Ð¹øÈ£ Æ÷Æ® ¹øÈ£¸¦ ÃßÃâÇÑ´Ù. ´ÙÀ½Àº ÀÌ Á¤º¸¸¦ »ç¿ëÇÏ¿© FTP ¼¹ö¿¡ Á¢¼ÓÇÏ°í ÆÄÀÏÀÇ µ¥ÀÌÅ͸¦ ´Ù¿î·Îµå¹Þ´Â DgFtpDown ÇÔ¼öÀÌ´Ù.
int DgFtpDown(TCHAR *Path, TCHAR *&Text)
{
HINTERNET hRemote;
DWORD FileSize,Size;
DWORD dwRead;
BOOL Result=FALSE;
TCHAR Server[256];
TCHAR User[32];
TCHAR Dir[MAX_PATH];
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 EndDown;
}
p=p2+1;
}
WIN32_FIND_DATA wfd;
HINTERNET hFind;
hFind=FtpFindFirstFile(hFtp,p,&wfd,0,0);
if (hFind==NULL) {
goto EndDown;
}
FileSize=wfd.nFileSizeLow;
InternetCloseHandle(hFind);
hRemote=FtpOpenFile(hFtp,p,GENERIC_READ,FTP_TRANSFER_TYPE_BINARY,0);
if (hRemote == NULL) {
MessageBox(g_hFrameWnd,"FTP ¼¹ö¿¡¼ ÆÄÀÏÀ» ãÀ» ¼ö ¾ø°Å³ª ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);
goto EndDown;
}
if (FileSize > 1048576 * 30) {
MessageBox(g_hFrameWnd,"FTP·Î´Â ÃÖ´ë 30M±îÁö¸¸ ¿ ¼ö ÀÖ½À´Ï´Ù.","¾Ë¸²",MB_OK);
goto EndDown;
}
wsprintf(Mes,"À§Ä¡ : %s",Path);
SetDlgItemText(hDlgDown,IDC_STDOWN1,Mes);
Text=(TCHAR *)malloc(FileSize+2);
memset(Text,0,FileSize+2);
p=Text;
for (;;) {
InternetQueryDataAvailable(hRemote,&Size,0,0);
Result=InternetReadFile(hRemote,p,Size,&dwRead);
if (Result==FALSE) {
MessageBox(g_hFrameWnd, "FTP ¼¹öÀÇ ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
}
if (bContDown==FALSE) {
break;
}
if (dwRead==0) {
break;
}
p+=dwRead;
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);
}
}
}
EndDown:
DgFtpUnConnect();
NetFail:
EnableWindow(g_hFrameWnd, TRUE);
DestroyWindow(hDlgDown);
if (Result == TRUE && bContDown == TRUE) {
return FileSize;
} else {
return -1;
}
}
ÀüüÀûÀÎ ±¸Á¶´Â DgHttpDown ÇÔ¼ö¿Í À¯»çÇÏ¸ç ¹öÆÛ¸¦ °ü¸®ÇÏ´Â ¹æ¹ýµµ µ¿ÀÏÇÏ´Ù. ´Ù¸¸ Á¢¼ÓÇÏ´Â ¼¹ö°¡ HTTP ¼¹ö°¡ ¾Æ´Ñ FTP ¼¹ö¶ó´Â Á¡¸¸ ´Ù¸£´Ù. È£ÃâÃø¿¡¼ ÆÄÀÏÀÇ Å©±â¸¦ ¸ð¸£±â ¶§¹®¿¡ ÀÌ ÇÔ¼ö°¡ ÆÄÀÏÀÇ Å©±â¸¸Å ¹öÆÛ¸¦ ÇÒ´çÇÏ¸ç ±×·¡¼ TextÀμö´Â Æ÷ÀÎÅÍÀÇ ·¹ÆÛ·±½ºÀÌ´Ù. ÀÌ ¸Þ¸ð¸®´Â È£ÃâÃø¿¡¼ ÇØÁ¦ÇØ¾ß ÇÑ´Ù.
ÀÌ ÇÔ¼ö´Â ÃÖ´ë 30MB±îÁöÀÇ ÆÄÀϸ¸ ´Ù¿î·Îµå¹Þ¾ÆÁÖ¸ç ±× ÀÌ»óÀÇ ÆÄÀÏ¿¡ ´ëÇؼ´Â ¿¡·¯·Î ó¸®ÇÏ°í Àִµ¥ ÀÌ´Â ¾ÈÀü»óÀÇ ÀÌÀ¯ ¶§¹®ÀÌ´Ù. FTP ¼¹ö´Â HTTP ¼¹ö¿Í´Â ´Þ¸® ¼ö¹é MBÁ¤µµÀÇ ´ë¿ë·® ÆÄÀϵéÀÌ ¸¹ÀÌ Àִµ¥, ÀÌ·± ÆÄÀÏÀ» À߸ø ¼±ÅÃÇß´Ù°¡´Â °ÅÀÇ ÇÁ·Î±×·¥ÀÌ ´Ù¿î »óÅ°¡ µÊÀ¸·Î ÀÌ·± »óŸ¦ ¹æÁöÇϱâ À§ÇØ ¿ë·®ÀÇ Á¦ÇÑÀ» µÎ¾ú´Ù.
»ç½Ç 30MB ÀÌ»óÀ̳ª µÇ´Â ÅؽºÆ® ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ¾Æ¼ ÆíÁýÇÑ ÈÄ ´Ù½Ã ¾÷·ÎµåÇÏ´Â °æ¿ì¶õ °ÅÀÇ ¾ø±â ¶§¹®¿¡ ÀÌ·± Á¦ÇÑÀÌ º° ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù. ·ÎÄà ÆÄÀÏÀÇ °æ¿ì ¸Þ¸ð¸®°ü¸®»óÀÇ ÀÌÀ¯·Î 30MBÀÇ Á¦ÇÑÀ» µÎ¾úÀ¸¸ç 30MB¸¦ ³ÑÀ» °æ¿ì Á¤¸»·Î ¿ °ÍÀÎÁö Áú¹®À» ÇßÁö¸¸ FTP ´Ù¿î·Îµå´Â Á¦ÇÑÀ» ³ÑÀ» °æ¿ì Áú¹®µµ ÇÏÁö ¾Ê°í ÀϹæÀûÀ¸·Î ¸Þ½ÃÁö¸¸ º¸¿©ÁÖ°í ¸®ÅÏÇØ ¹ö·È´Ù. ±×·¸°Ô Å« ÆÄÀÏÀ» ÆíÁýÇÏ·Á¸é µû·Î ´Ù¿î·Îµå¹Þ¾Æ¼ ÆíÁýÇÏ´Â °ÍÀÌ ´õ ³ªÀº ¹æ¹ýÀÌ´Ù.
FTP ¼¹ö¿¡ ÀÖ´Â ÆÄÀÏÀÇ Å©±â¸¦ Á¶»çÇϱâ À§ÇØ ÇϳªÀÇ ÆÄÀÏ¿¡ ´ëÇØ ¿°Å¸¦ ÇÏ°í Àִµ¥ ÀÌ·± ¹æ¹ý ´ë½Å FtpGetFileSize ÇÔ¼ö·Î ÈξÀ ´õ °£´ÜÇÏ°Ô Á¶»çÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö´Â IE 5.0À̻󿡼¸¸ Áö¿øµÇ¸ç ºñÁÖ¾ó C++ 6.0¿¡¼´Â ¾Æ¿¹ ÄÄÆÄÀÏÀÌ ¾ÈµÇ±â ¶§¹®¿¡ ¾î¿ ¼ö ¾øÀÌ FtpFindFirstFile ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. Ç÷§Æû SDK¸¦ ¼³Ä¡ÇÏ°í IE 5.0ÀÌ»ó¿¡ ´ëÇؼ¸¸ ½ÇÇàµÇµµ·Ï ÇÑ´Ù¸é FtpGetFileSize ÇÔ¼ö¸¦ »ç¿ëÇصµ »ó°ü¾øÁö¸¸ »ç¿ë ȯ°æ¿¡ Á¦¾àÀÌ »ý±ä´Ù´Â Á¡¿¡¼ ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù.