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 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 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 ¼¹ö¿¡ ¾²±â ±ÇÇÑÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.