´Ù. ¸ÖƼ ½º·¹µå·Î Àüȯ

ÆÄÀÏ¿¡¼­ ã±â¿Í ¹Ù²Ù±â ±â´ÉÀÌ Àß µ¿ÀÛÇϱâ´Â ÇÏÁö¸¸ °Ë»ö ½Ã°£ÀÌ ¿À·¡ °É·Á¼­ Á» ºÒ¸¸Á·½º·´´Ù. ±â°èÀûÀ¸·Î µ¿ÀÛÇÏ´Â Çϵåµð½ºÅ©¸¦ µÚÁö´Â ÀÛ¾÷Àº ¾î¿ ¼ö ¾øÀÌ ½Ã°£ÀÌ ¿À·¡ °É¸± ¼ö¹Û¿¡ ¾øÀ¸¸ç ¾î¶°ÇÑ ¹æ¹ýÀ¸·Îµµ Àý´ëÀûÀÎ °Ë»ö ¼Óµµ¸¦ °³¼±ÇÒ ¼ö´Â ¾ø´Ù. ÇÏÁö¸¸ ½Ã°£ÀÌ ¿À·¡ °É¸°´Ù°í Çؼ­ °Ë»öÀÌ ³¡³¯ ¶§±îÁö ¹Ýµå½Ã ±â´Ù·Á¾ß¸¸ ÇÏ´Â °ÍÀº ¾Æ´Ï¹Ç·Î ÆÄÀÏ°Ë»ö ÀÛ¾÷À» º°µµÀÇ ½º·¹µå·Î ºÐ¸®Çϵµ·Ï ÇÏÀÚ.

Win32´Â ¸ÖƼ ½º·¹µå¶ó´Â ÈǸ¢ÇÑ ¹é±×¶ó¿îµå ÀÛ¾÷ Áö¿ø ±â´ÉÀ» Á¦°øÇϴµ¥ ÆÄÀÏ°Ë»öÀ̾߸»·Î ½º·¹µå¸¦ ¾²±â¿¡ °¡Àå ÀûÇÕÇÑ ÀÛ¾÷ÀÌ´Ù. óÀ½ºÎÅÍ ½º·¹µå¸¦ ¾²Áö ¾ÊÀº ÀÌÀ¯´Â ÆÄÀÏ°Ë»ö ÀýÂ÷°¡ ¿ö³« º¹ÀâÇؼ­ Á¶±ÝÀ̳ª¸¶ ÀÌÇظ¦ µ½±â À§ÇØ °£´ÜÇÑ ·çƾÀ» ¼³°èÇϱâ À§Çؼ­¿´´Ù. ÀÌÁ¦ ³í¸®°¡ ¿ÏÀüÈ÷ ¸¸µé¾îÁ³°í ÇÊ¿äÇÑ ÇÔ¼öµéÀÌ ¸ðµÎ ±¸¼ºµÇ¾úÀ¸¹Ç·Î ¸ÖƼ ½º·¹µå·Î ÀüȯÇغ¸µµ·Ï ÇÏÀÚ. ÆÄÀÏ°Ë»ö¿¡¼­ÀÇ ¸ÖƼ ½º·¹µå¸¦ Áö¿øÇϱâ À§ÇØ ½º·¹µå ÇÚµéÀ» Àü¿ªº¯¼ö·Î ¼±¾ðÇÑ´Ù.

 

HANDLE hFIFThread;

 

ÆÄÀÏ°Ë»öÀÌ ½ÃÀ۵Ǵ ½ÃÁ¡Àº FindInFiles ÇÔ¼ö¸¦ óÀ½ È£ÃâÇÒ ¶§À̹ǷΠÀÌ ÇÔ¼ö È£Ãâ¹®À» ºÐ¸®µÈ ½º·¹µå·Î ¿Å°Ü ÁÖ¸é µÈ´Ù. °Ë»öÀ» ½ÃÀÛÇÏ´Â ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void FindOrReplaceInFiles(BOOL bReplace)

{

     BOOL bDeep;

    DWORD ThreadID;

 

     ....

 

    if (bReplace) {

        lstrcpy(LastFIF,arFind[1].Get(0));

        hFIFThread=CreateThread(NULL, 0, FIFThread,(LPVOID)OnReplaceFile,0,&ThreadID);

    } else {

        lstrcpy(LastFIF,arFind[0].Get(0));

        hFIFThread=CreateThread(NULL, 0, FIFThread,(LPVOID)OnFindFile,0,&ThreadID);

     }

}

 

FindInFiles ÇÔ¼ö¸¦ Á÷Á¢ È£ÃâÇÏ´Â ´ë½Å ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ½º·¹µå¸¸ ½ÃÀÛÇϵµ·Ï Çß´Ù. ½º·¹µåÀÇ Àμö·Î Äݹé ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ¿© °Ë»öÁß¿¡ ¹ß°ßµÈ ÆÄÀÏ¿¡ ´ëÇØ ¾î¶² 󸮸¦ ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌÁ¦ FindOrReplaceInFiles ÇÔ¼ö´Â ½º·¹µå¸¸ ½ÃÀÛ½ÃÄÑ ³õ°í Áï½Ã ¸®ÅÏÇÏ¿© »ç¿ëÀÚ°¡ ´Ù¸¥ ÀÛ¾÷À» ÇÒ ¼ö ÀÖµµ·Ï ÇÒ °ÍÀ̸ç ÆÄÀÏ°Ë»öÀº ½º·¹µå°¡ ´ã´çÇÑ´Ù. ½º·¹µå ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¿´´Ù.

 

DWORD WINAPI FIFThread(LPVOID pCallback)

{

     bContFIF=TRUE;

     FindInFiles(arFind[2].Get(0),arFind[3].Get(0),FIF_DEEP | FIF_INCHID,

          (FIFCALLBACK)pCallback,(LPVOID)NULL);

     return 0;

}

 

FindInFiles°¡ °Ë»öÀ» °è¼Ó Çϵµ·Ï bContFIF Ç÷¡±×¸¦ TRUE·Î ¸¸µé°í FindInFiles ÇÔ¼ö¸¦ È£ÃâÇÏ¿´´Ù. bContFIF Àü¿ªº¯¼ö´Â TRUE·Î ÃʱâÈ­µÇ¾î ÀÖÁö¸¸ ÀÌÀü °Ë»ö µ¿ÀÛÀÌ Áß°£¿¡ Ãë¼ÒµÇ¸é FALSE·Î ¹Ù²ð ¼öµµ Àֱ⠶§¹®¿¡ FindInFiles¸¦ È£ÃâÇϱâ Àü¿¡ ¹«Á¶°Ç ÀÌ º¯¼ö¸¦ TRUE·Î ´Ù½Ã ¹Ù²ã ÁÖ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù. ÀÌ·¸°Ô µÇ¸é FindInFiles ÇÔ¼ö°¡ ºÐ¸®µÈ ½º·¹µå¿¡¼­ ½ÇÇàµÇ¹Ç·Î ¸ÞÀÎ ½º·¹µå´Â ÆÄÀÏ°Ë»öÀ» ÇÏ´Â Áß¿¡µµ ´Ù¸¥ ÀÛ¾÷À» °è¼Ó ÇÒ ¼ö ÀÖ´Ù.

ÆÄÀÏÀ» ¿­¾î¼­ ÆíÁýÇÒ ¼öµµ ÀÖ°í ÆíÁýÇÏ´ø ÆÄÀÏÀ» ÀúÀåÇÒ ¼öµµ ÀÖÀ¸¸ç ¹®¼­ ³»¿¡¼­ °Ë»öµµ °¡´ÉÇÏ´Ù. ½ÉÁö¾î °Ë»ö°á°ú¸¦ º¼ ¼öµµ ÀÖ°í °Ë»ö°á°ú¿¡¼­ ÆÄÀÏÀ» ã¾Æ°¡´Â °Íµµ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ µü ÇÑ °¡Áö ÇÒ ¼ö ¾ø´Â ÀÛ¾÷ÀÌ Çϳª Àִµ¥ ÆÄÀÏÀ» °Ë»öÇÏ´Â Áß¿¡ ÆÄÀÏ Ã£±â´Â ÇÒ ¼ö ¾ø´Ù. ÇÑ ½º·¹µå¸¦ ¿©·¯ ¹ø ½ÇÇàÇÏ´Â °Íµµ ¿øÄ¢ÀûÀ¸·Î °¡´ÉÇÏÁö¸¸ Ãâ·Â °á°úâÀÌ Çϳª¹Û¿¡ ¾ø±â ¶§¹®¿¡ µÎ °Ë»ö ½º·¹µåÀÇ °Ë»ö°á°ú°¡ ÇÑ °á°úâ¿¡ ¼¯¿©¼­ Ãâ·ÂµÉ °ÍÀÌ´Ù. Ãâ·Â °á°úâÀÌ ¿©·¯ °³¶ó¸é µ¿½Ã¿¡ µÎ °³ÀÇ ÆÄÀÏ°Ë»ö ½º·¹µå¸¦ µ¹¸®´õ¶óµµ ¼Óµµ¸¸ ´À·ÁÁú »Ó ³í¸®ÀûÀ¸·Î ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù.

¸¸¾à ÆÄÀÏ°Ë»öÀ» ÇÏ´Â Áß¿¡ ¶Ç ´Ù¸¥ ÆÄÀÏ°Ë»ö ¸í·ÉÀ» ³»·È´Ù¸é À̶§´Â »ç¿ëÀÚ¿¡°Ô ÇöÀç ÁøÇàÁßÀÎ °Ë»öÀ» Áß´ÜÇÒ °ÍÀÎÁö Áú¹®ÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ °Ë»ö Áß´ÜÀ» ¼±ÅÃÇϸé Áï½Ã ½ÇÇàÁßÀÎ ½º·¹µå¸¦ Á¾·áÇÏ°í »õ·Î¿î °Ë»öÀ» À§ÇÑ ÆÄÀÏ Ã£±â ´ëÈ­»óÀÚ¸¦ ¶ç¿öÁÖ°í °Ë»ö °è¼ÓÀ» ¼±ÅÃÇϸé ÁøÇàÁßÀÎ °Ë»öÀÌ °è¼Ó ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ¾Æ¹« Àϵµ ÇÏÁö ¾ÊÀ¸¸é µÈ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ÆÄÀÏ°Ë»ö ½º·¹µåÀÇ ÇöÀç »óŸ¦ Á¶»çÇÏ°í ½ÇÇàÁßÀ̶ó¸é »ç¿ëÀÚ¿¡°Ô Áú¹®À» ÇÑ´Ù.

 

BOOL TestFIFThread()

{

     DWORD dwExit;

     MSG Message;

 

     GetExitCodeThread(hFIFThread,&dwExit);

     if (dwExit==STILL_ACTIVE) {

          if (MessageBox(g_hFrameWnd,"ÆÄÀÏ °Ë»öÀÌ ÀÌ¹Ì ÁøÇàÁßÀÔ´Ï´Ù. "

              "°Ë»öÀ» ÁßÁöÇÏ°í »õ·Î¿î °Ë»öÀ» ÇϽðڽÀ´Ï±î?","Áú¹®",MB_YESNO)==IDNO)

              return FALSE;

          bContFIF=FALSE;

          while (WaitForSingleObject(hFIFThread,0)==WAIT_TIMEOUT) {

              if (PeekMessage(&Message,NULL,0,0,PM_REMOVE)) {

                   DispatchMessage(&Message);

              }

          }

     }

     return TRUE;

}

 

GetExitCodeThread ÇÔ¼ö´Â ½º·¹µåÀÇ Á¾·á »óŸ¦ Á¶»çÇϴµ¥ ¸¸¾à ¾ÆÁ÷ Á¾·áµÇÁö ¾ÊÀº ½º·¹µå¶ó¸é STILL_ACTIVE°¡ ¸®ÅϵȴÙ. ÀÌ °æ¿ì ÀÌ¹Ì ÁøÇàÁßÀÎ °Ë»öÀ» ÁßÁöÇÒ °ÍÀÎÁö Áú¹®ÇÏ°í ¿¹¸¦ ¼±ÅÃÇϸé Áï½Ã ½ÇÇàÁßÀÎ ½º·¹µå¸¦ ÁߴܽÃÄÑ¾ß ÇÑ´Ù. FindInFiles ÇÔ¼ö¸¦ Áß°£¿¡ Á¾·á½ÃÅ°·Á¸é bContFIF Ç÷¡±×¸¦ FALSE·Î ¹Ù²ã Áֱ⸸ ÇÏ¸é µÈ´Ù. TerminateThread ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ½º·¹µå¸¦ °­Á¦·Î Á¾·á½Ãų ¼öµµ ÀÖÁö¸¸ ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¹Ç·Î ½º·¹µå°¡ ½º½º·Î Á¾·áÇÒ ¼ö ÀÖµµ·Ï ½ÅÈ£¸¦ ÁÖ´Â °ÍÀÌ ´õ ³´´Ù. º¸Åë ½º·¹µåÀÇ Á¾·á¸¦ À§Çؼ­´Â À̺¥Æ® °´Ã¼¸¦ ¸¹ÀÌ »ç¿ëÇÏÁö¸¸ ÀÌ ¿¹Á¦¿¡¼­¿Í °°ÀÌ Àü¿ªº¯¼ö¸¦ ¾²´Â ¹æ¹ýµµ °£ÆíÇÏ´Ù´Â Á¡¿¡¼­ ³ª»Û ¼±ÅÃÀÌ ¾Æ´Ï´Ù.

FindInFiles ÇÔ¼ö´Â ÆÄÀÏ Çϳª¸¦ °Ë»çÇÒ ¶§¸¶´Ù bContFIF Ç÷¡±×¸¦ Á¡°ËÇϵµ·Ï µÇ¾î ÀÖÁö¸¸ ÀÌ Ç÷¡±×¸¦ FALSE·Î ¹Ù²Û´Ù°í Çؼ­ Áï½Ã Á¾·áµÇ´Â °ÍÀº ¾Æ´Ï´Ù. ÇÑ ÆÄÀÏ¿¡ ´ëÇÑ °Ë»öÀ» ÁøÇàÁßÀ̶ó¸é ÀÌ ÆÄÀÏ°Ë»öÀ» ¿ÏÀüÈ÷ ¸¶Ä¡°í ´ÙÀ½ ÆÄÀÏÀ» °Ë»öÇϱâ Á÷Àü¿¡ bContFIF Ç÷¡±×¸¦ º¸°Ô µÇ¹Ç·Î ½º·¹µå°¡ ¿ÏÀüÈ÷ Á¾·áµÉ ¶§±îÁö´Â ¾à°£ÀÇ ½Ã°£ÀÌ ´õ ÇÊ¿äÇÏ´Ù. bContFIF¸¦ FALSE·Î ¹Ù²Ù´Â °ÍÀº ¸ÞÀÎ ½º·¹µå°¡ ÆÄÀÏ°Ë»ö ½º·¹µå¿¡°Ô ¡®¾ß! ´çÀå ±×¸¸ µÖ¡¯¶ó´Â Áö½Ã¸¦ ÇÏ´Â °ÍÀε¥ FindInFiles ÇÔ¼ö°¡ ÀÌ Áö½Ã¸¦ ±×´ÙÁö »¡¸® ´«Ä¡Ã¤Áö ¸øÇÏ´Â °ÍÀÌ´Ù.

±×·¡¼­ ¸ÞÀÎ ½º·¹µå´Â bContFIF¸¦ FALSE·Î ¹Ù²Û ÈÄ ÆÄÀÏ°Ë»ö ½º·¹µå°¡ ¿ÏÀüÈ÷ Á¾·áµÉ ¶§±îÁö ´ë±âÇØ¾ß ÇÑ´Ù. À̶§ WaitForSingleObject ÇÔ¼ö·Î ´Ü¼øÈ÷ ´ë±â¸¸ Çؼ­´Â ¾ÈµÈ´Ù. ÆÄÀÏ°Ë»ö ½º·¹µå´Â °Ë»ö°á°ú Ãâ·ÂÀ» À§ÇØ ListView_InsertItem °°Àº ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸®½ºÆ® ºä¿¡ ¹®ÀÚ¿­À» »ðÀÔÇϴµ¥ ÀÌ ÇÔ¼ö È£ÃâÀº °á±¹Àº ¸ÞÀÎ ½º·¹µå°¡ ó¸®ÇØ¾ß ÇÏ´Â SendMessageÈ£ÃâÀÌ´Ù. SendMessage È£ÃâÀº ¿ÏÀüÈ÷ ¸®Å쵃 ¶§±îÁö´Â ½º·¹µå¸¦ ºí·Ï½ÃÅ°´Â Ư¡ÀÌ ÀÖ´Ù. ÇöÀç ¸ÞÀÎ ½º·¹µå´Â TestFIFThread ÇÔ¼ö¸¦ ½ÇÇàÇÏ°í Àֱ⠶§¹®¿¡ ÆÄÀÏ°Ë»ö ½º·¹µåÀÇ SendMessage È£ÃâÀº TestFIFThread ÇÔ¼ö°¡ Á¾·áµÉ ¶§±îÁö´Â 󸮵ÇÁö ¸øÇÑ´Ù.

°á±¹ ÆÄÀÏ°Ë»ö ½º·¹µå´Â ¸ÞÀÎ ½º·¹µå°¡ SendMessage ¿äûÀ» ó¸®Çϱ⸦ ±â´Ù¸®°Ô µÇ°í ¸ÞÀÎ ½º·¹µå´Â ÆÄÀÏ°Ë»ö ½º·¹µåÀÇ Á¾·á¸¦ ±â´Ù¸®°Ô µÇ¹Ç·Î ÀüÇüÀûÀÎ µ¥µå¶ô(DeadLock) »óȲÀÌ µÇ´Â °ÍÀÌ´Ù. ±×·¡¼­ ¸ÞÀÎ ½º·¹µå´Â Àڽſ¡°Ô Àü´ÞµÇ´Â ¸Þ½ÃÁö´Â ó¸®Çϸ鼭 ´ë±â¸¦ ÇØ¾ß ÇÑ´Ù. WaitForSingleObject ÇÔ¼ö·Î ÆÄÀÏ°Ë»ö ½º·¹µåÀÇ »óŸ¦ Á¶»ç¸¸ ÇÏ°í ¾ÆÁ÷ ½ÅÈ£»óÅ°¡ ¾Æ´Ï¸é ¸Þ½ÃÁö ÆßÇÎÀ» Çϸ鼭 ÀÌ ½º·¹µå°¡ ¿ÏÀüÈ÷ Á¾·áµÉ ¶§±îÁö ±â´Ù¸®µµ·Ï ÇÏ¿´´Ù.

TestFIFThread ÇÔ¼ö´Â ÆÄÀÏ°Ë»ö ½º·¹µå°¡ ½ÇÇàÁßÀÌ ¾Æ´Ï°Å³ª »ç¿ëÀÚ¿¡ ÀÇÇØ ÁßÁöµÇ¾úÀ¸¸é TRUE¸¦ ¸®ÅÏÇÏ°í ½ÇÇàÀ» °è¼ÓÇØ¾ß ÇÒ »óȲÀ̸é FALSE¸¦ ¸®ÅÏÇÑ´Ù. OnCommand¿¡¼­´Â ÆÄÀÏ°Ë»öÀ» ½ÃÀÛÇϱâ Àü¿¡ ÀÌ ÇÔ¼ö¸¦ ¸ÕÀú È£ÃâÇغ¸°í »õ·Î¿î °Ë»öÀ» ½ÃÀÛÇصµ µÉ »óȲÀÎÁö¸¦ ¸ÕÀú Á¶»çÇÑ ÈÄ ÆÄÀÏ Ã£±â ´ëÈ­»óÀÚ¸¦ ¶ç¿î´Ù. Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çϵµ·Ï ÇÏÀÚ.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_SEARCH_FILES:

          if (TestFIFThread()==TRUE) {

              if (DialogBox(g_hInst,MAKEINTRESOURCE(IDD_FILEFIND),hWnd,FileFindDlgProc)==IDOK) {

                   FindOrReplaceInFiles(FALSE);

              }

          }

          break;

     case IDM_SEARCH_RFILES:

          if (TestFIFThread()==TRUE) {

              if (DialogBox(g_hInst,MAKEINTRESOURCE(IDD_FILEREPLACE),hWnd,FileFindDlgProc)==IDOK) {

                   FindOrReplaceInFiles(TRUE);

              }

          }

          break;

 

¿©±â±îÁö Äڵ带 ÀÛ¼ºÇÑ ÈÄ ¿¹Á¦¸¦ ½ÇÇàÇغ¸¸é ¹é±×¶ó¿îµå °Ë»öÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù. °Ë»öÁß¿¡ µý ÁþÀ» ÇÒ ¼öµµ ÀÖ°í ½ÇÇàÁßÀÎ °Ë»öÀ» Ãë¼ÒÇÒ ¼öµµ ÀÖ´Ù. ±â´É»óÀ¸·Î´Â ¿Ï¼ºµÇ¾úÁö¸¸ °Ë»ö Ãë¼ÒÀÇ ¹ÝÀÀ¼ºÀÌ ÁÁÁö ¸øÇϹǷΠÁ¶±Ý ´õ »¡¸® Ãë¼ÒÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù.

bContFIF Ç÷¡±×´Â FindInFiles ÇÔ¼ö¿¡¼­ ´ÙÀ½ ´ë»ó ÆÄÀÏ·Î ¿Å°Ü°¥ ¶§ µü ÇÑ ¹ø¸¸ Á¡°ËµÈ´Ù. ±×·¡¼­ OnFindFileÀÌ ÀÌ¹Ì È£ÃâµÈ »óȲÀÏ ¶§´Â ÀÌ ÇÔ¼ö°¡ ¿ÏÀüÈ÷ ¸®ÅÏÇÒ ¶§±îÁö ½º·¹µå¸¦ Á¾·áÇ϶ó´Â ½ÅÈ£¸¦ Á¢¼öÇÏÁö ¸øÇÏ°í °è¼Ó ½ÇÇàÇÑ´Ù. ¸¸¾à ÇÑ ÆÄÀÏÀÇ Å©±â°¡ 10MBÀÌ°í ÀÌ ÆÄÀÏ¿¡ °Ë»ö ´ë»ó ¹®ÀÚ¿­ÀÌ 1000°³°¡ ÀÖ´Ù¸é ÀÌ ÆÄÀÏÀ» ´Ù °Ë»öÇÒ ¶§±îÁö ½º·¹µå´Â ¸ÞÀÎ ½º·¹µåÀÇ Á¾·á Áö½Ã¸¦ ¾ËÁö ¸øÇÑ Ã¤·Î °è¼Ó ½ÇÇàµÈ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é bContFIF Ç÷¡±×¸¦ Á» ´õ ÀÚÁÖ Á¡°ËÇÏ¿© ½º·¹µå¸¦ ³¡³¾ ½Ã±â¸¦ »¡¸® ¾Ë¾Æç ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ¹Ýº¹ÀûÀÎ ·çÇÁÀÇ Áß°£Áß°£¿¡ ÀÌ º¯¼ö Á¡°Ë¹®À» »ðÀÔÇϵµ·Ï ÇÏÀÚ. ´ÙÀ½ µÎ ÇÔ¼ö°¡ °¡Àå ÀÚÁÖ È£ÃâµÇ¹Ç·Î ÀÌ ÇÔ¼öÀÇ ·çÇÁ ³¡¿¡¼­ bContFIF¸¦ Á¡°ËÇغ¸µµ·Ï ÇÏ¿´´Ù.

 

int OnFindFile(TCHAR *Path,DWORD Attr,LPVOID pCustom)

{

     ....

     for (pbuf=buf;;) {

          ....

        if (bContFIF==FALSE)

           break;

     }

 

     free(buf);

     CloseHandle(hFile);

     return 0;

}

 

int OnReplaceFile(TCHAR *Path, DWORD Attr, LPVOID pCustom)

{

     ....

     for (pbuf=buf;;) {

          ....

        if (bContFIF==FALSE) {

           bReplace=FALSE;

           break;

        }

     }

 

     CloseHandle(hFile);

     if (bReplace) {

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

              CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

          if (hFile!=INVALID_HANDLE_VALUE) {

              WriteFile(hFile,buf,lstrlen(buf),&dwRead,NULL);

              CloseHandle(hFile);

          }

     }

 

     free(buf);

     return 0;

}

 

ÇÑ ÆÄÀÏ¿¡ ´ëÇØ Ã£±â³ª ¹Ù²Ù±â¸¦ ÇÏ´ø Áß¿¡¶óµµ ¸ÞÀÎ ½º·¹µå°¡ ÁßÁö¸¦ ¸í·ÉÇϸé ÀÌ ·çÇÁ¿¡¼­ bContFIF¸¦ Á¡°ËÇغ¸°í Áï½Ã ÀÛ¾÷À» Áß´ÜÇϵµ·Ï Çß´Ù. ÇÏ´ø ÀÛ¾÷À» Áß´ÜÇÑ´Ù°í Çؼ­ ¹Ù·Î returnÇؼ­´Â ¾ÈµÇ¸ç ¸¶Áö¸· µÚ󸮴 ÇÏ°í ¸®ÅÏÇØ¾ß ÇÑ´Ù. ´Ü, ÆÄÀÏ ¹Ù²Ù±âÀÇ °æ¿ì ÇÑ ÆÄÀÏÀÇ ÀϺθ¸ º¯°æµÇ´Â °ÍÀ» ¹æÁöÇϱâ À§ÇØ bReplace´Â °­Á¦·Î FALSE·Î ¹Ù²Ù¾î Áß°£¿¡ Ãë¼ÒµÈ ÆÄÀÏÀº ¹Ù²Ù±â¸¦ ÇÏÁö ¾Ê´Â´Ù.