¹Ù. ÆÄÀÏ¿¡¼­ ¹Ù²Ù±â

ÆÄÀÏ¿¡¼­ ¹Ù²Ù±â´Â ¹®ÀÚ¿­À» °Ë»öÇÏ´Â ¹æ¹ýÀº µ¿ÀÏÇÏÁö¸¸ Á¶°Ç¿¡ ¸Â´Â ¹®ÀÚ¿­ÀÌ ¹ß°ßµÇ¸é ÆÄÀÏÀ» º¯°æÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼­ Á¶±Ý ´õ º¹ÀâÇÏ´Ù. °Ë»ö°á°ú ÆÄÀÏÀÌ ´õ Ä¿Áú ¼ö Àֱ⠶§¹®¿¡ ÆÄÀÏ Å©±â¸¸Å­ÀÇ °íÁ¤ ±æÀÌ ¹öÆÛ¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç µ¿ÀûÀ¸·Î ¹öÆÛ Å©±â¸¦ °ü¸®ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¡®¿ì¸®³ª¶ó¡¯¸¦ ¡®´ëÇѹα¹¡¯À̳ª ¡®Çѱ¹¡¯À¸·Î ¹Ù²Ù¸é º° ¹®Á¦°¡ ¾øÁö¸¸ ¡®¿Á¶³¸Þ¡¯¸¦ ¡®¿Á»ó¿¡¼­ ¶³¾îÁø ¸ÞÁÖ¡¯·Î ¹Ù²Û´Ù¸é ÆÄÀÏ Å©±â°¡ ´Ã¾î³¯ °ÍÀÌ´Ù.

¿¡±¸ ±×±îÁþ °Å ´Ã¾î³ª ºÁ¾ß ¾ó¸¶³ª ´Ã¾î³ª°Ú´À³Ä°í ¾à°£ÀÇ ¿©À¯ºÐÀ» ÁÖ´Â Á¤µµ·Î ¹®Á¦°¡ ÇØ°áµÉ °ÍÀ¸·Î ¾ÈÀÏÇÏ°Ô »ý°¢Çؼ­´Â ¾ÈµÈ´Ù. °Ë»ö°á°ú°¡ ¸¹À¸¸é ¸¹À»¼ö·Ï ´ëüµÇ´Â ¹®ÀÚ¿­ÀÌ ±æ¼ö·Ï ÇÊ¿äÇÑ ¹öÆÛ Å©±â°¡ ´õ Ä¿Áø´Ù. ¹öÆÛ°¡ Ä¿Áö´Â Á¤µµ°¡ ¹®Á¦°¡ ¾Æ´Ï¶ó ¾ó¸¶³ª Ä¿ÁúÁö ¹Ì¸® ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ ¹®Á¦´Ù. ±Ø´ÜÀûÀÎ ¿¹¸¦ µéÀÚ¸é ¡®¾Ö±¹°¡¡¯¸¦ ¡®µ¿Çع°°ú ¹éµÎ»êÀÌ ..... Ã漺Çϼ¼¡¯·Î ¹Ù²Ù¸é ¾à°£ÀÌ ¾Æ´Ï¶ó ¸î ¹è·Î Ä¿Á® ¹ö¸± °ÍÀÌ´Ù.

±×·¡¼­ ÆÄÀÏ¿¡¼­ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â ÀÏ´Ü ÆÄÀÏÀÇ Å©±â¿¡ ¾à°£ÀÇ ¿©À¯ºÐÀ» Áà ¸Þ¸ð¸®¸¦ ÇÒ´çÇ쵂 ¹®ÀÚ¿­ÀÌ ´ëüµÉ ¶§¸¶´Ù ³²Àº ¿©À¯ºÐÀÌ ÃæºÐÇÑÁö Á¡°ËÇØ¾ß ÇÑ´Ù. ÀÌ·± ½ÄÀÇ ¸Þ¸ð¸®°ü¸®´Â ¾Õ¿¡¼­ ¿©·¯ ¹ø ½Ç½ÀÇÑ ÀûÀÌ À־ ÀÌÁ¦´Â ¾ÆÁÖ Àͼ÷ÇÒ °ÍÀÌ´Ù. ´ÙÀ½Àº ÆÄÀÏ¿¡¼­ ¹Ù²Ù±â¸¦ ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼öµµ FindInFiles ÇÔ¼ö¿¡ ÀÇÇØ È£ÃâµÇ¸ç Àμö´Â OnFindFile ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.

 

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

{

     TCHAR what[256];

     TCHAR to[256];

     HANDLE hFile;

     DWORD size, dwRead;

     TCHAR *buf, *pbuf;

     TCHAR *p;

     int line,col;

     TCHAR Text[501];

     TCHAR Mes[512];

     LVITEM LI;

     int idx;

     BOOL bReplace=FALSE;

     int len1,len2;

     int extra, memsize;

     int tempoff;

 

     if ((Attr & FILE_ATTRIBUTE_DIRECTORY) || (Attr & FILE_ATTRIBUTE_READONLY)) {

          return 0;

     }

 

     if (FindChildWithFile(Path) != NULL) {

          wsprintf(Mes, "%s ÆÄÀÏÀº ¿­·Á ÀÖÀ¸¹Ç·Î ¹Ù²Ù±â¸¦ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù.",Path);

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

          return -1;

     }

 

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

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

     len1=lstrlen(what);

     len2=lstrlen(to);

 

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

          OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

     if (hFile==INVALID_HANDLE_VALUE) {

          return -1;

     }

     size=GetFileSize(hFile,NULL);

     if (size > 30*1048576) {

          CloseHandle(hFile);

          return -1;

     }

     extra=10000;

 

     memsize=size+extra+1;

     buf=(TCHAR *)malloc(memsize);

     ReadFile(hFile,buf,size,&dwRead,NULL);

     buf[size]=0;

 

     for (pbuf=buf;;) {

          if (extra < 256) {

              tempoff=pbuf-buf;

              memsize+=10000;

              extra+=10000;

              buf=(TCHAR *)realloc(buf,memsize);

              pbuf=buf+tempoff;

          }

 

          p=FindString(pbuf,0,what,TRUE,(FindFlag & AE_FIND_MATCHCASE)!=0);

          if (p == NULL)

              break;

 

          if (FindFlag & AE_FIND_WHOLEWORD) {

              if (!((p==buf || IsDelimiter(*(p-1))) && IsDelimiter(*(p+lstrlen(what))))) {

                   pbuf=p+lstrlen(what);

                   continue;

              }

          }

 

          bReplace=TRUE;

          memmove(p+len2,p+len1,lstrlen(p+len1)+1);

          memcpy(p,to,len2);

 

          TotalFind++;

          GetLineNumAndText(buf,p,Text,line,col);

 

          LI.mask=LVIF_TEXT;

          LI.state=0;

          LI.stateMask=0;

          LI.iSubItem=0;

          LI.iItem=ListView_GetItemCount(hList);

          itoa(TotalFind,Mes,10);

          LI.pszText=Mes;

          idx=ListView_InsertItem(hList,&LI);

 

          if (FindFlag & AE_FIND_SHORTPATH) {

              wsprintf(Mes,"%s(%d,%d)",Path+lstrlen(arFind[2].Get(0))+1,line,col);

          } else {

              wsprintf(Mes,"%s(%d,%d)",Path,line,col);

          }

          ListView_SetItemText(hList,idx,1,Mes);

 

          ListView_SetItemText(hList,idx,2,Text);

          UpdateWindow(hList);

 

          pbuf=p+len2;

          extra -= (len2-len1);

     }

 

     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;

}

 

ÀÌ ÇÔ¼ö´Â ¹Ù²Ù±â¸¦ ½ÃÀÛÇϱâ Àü¿¡ ¸î °¡Áö Á¶°Ç Á¡°ËÀ» ÇÑ´Ù. ¿ì¼± Æú´õ³ª ÀбâÀü¿ë ÆÄÀÏÀÎ °æ¿ì´Â ¹Ù²Ù±â¸¦ ÇÒ ¼ö ¾ø´Ù. ÀÌ·± ÆÄÀÏÀ» ¸¸³ª¸é ±×³É Á¶¿ëÈ÷ ¾Æ¹« Àϵµ ÇÏÁö ¾Ê°í ¸®ÅÏÇعö¸®¸é µÈ´Ù. ÀÌ¹Ì ÆíÁýÁßÀÎ ÆÄÀϵµ ÀáÀçÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÀÒÀ» À§ÇèÀÌ ÀÖÀ¸¹Ç·Î ¹Ù²Ù±â¸¦ ÇÒ ¼ö ¾ø´Ù. ¾ÆÁÖ À§ÇèÇϹǷΠ¸Þ½ÃÁö¹Ú½º·Î ÀÌ »ç½ÇÀ» ºÐ¸íÈ÷ ¾Ë·Á ÁÖµµ·Ï Çß´Ù. »ç¿ëÀÚ´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÆíÁýÇÏ°í ÀÖ´Â ÆÄÀÏÀÌ ¹Ù²Ù±â ´ë»óÀ̸é ÆÄÀÏÀ» ´ÝÀº ÈÄ ¸í·ÉÀ» ´Ù½Ã ½ÇÇàÇØ¾ß ÇÑ´Ù.

¶ÇÇÑ ÆÄÀÏÀÇ Å©±â°¡ 30MB ÀÌ»óÀÏ ¶§µµ ¾öû³­ ½Ã½ºÅÛ ¸®¼Ò½º¸¦ ¼Ò¸ðÇϹǷΠ¹Ù²Ù±â¸¦ °ÅºÎÇϵµ·Ï ÇÏ¿´´Ù. ÆÄÀÏ Ã£±â¸¦ ÇÒ ¶§´Â ÆÄÀÏÀ» Àб⸸ ÇϹǷΠ30MB±îÁö¸¸ °Ë»öÇϵµ·Ï ÇßÁö¸¸ ¹Ù²Ù±â´Â ÆÄÀÏÀ» º¯°æÇϱ⠶§¹®¿¡ 30MB±îÁö¸¸ º¯°æÇÒ ¼ö ¾ø¾î ¾Æ¿¹ ´ë»ó ÆÄÀÏ¿¡¼­ Á¦¿Ü½ÃÄÑ ¹ö·È´Ù. ÀÌ·± Å« ÆÄÀÏ¿¡ ´ëÇØ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â µÎ °³ÀÇ ÆÄÀÏ ¸ÊÇÎ °´Ã¼¸¦ »ç¿ëÇØ¾ß ½Ã½ºÅÛ¿¡ ¹«¸®¸¦ ÁÖÁö ¾Ê°í ÀÛ¾÷À» ¿Ï·áÇÒ ¼ö ÀÖ´Ù.

¹®ÀÚ¿­À» °Ë»öÇÏ´Â ¹æ¹ýÀº OnFileFind ÇÔ¼ö¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇ쵂 °Ë»öµÈ ¹®ÀÚ¿­À» ´ëü ¹®ÀÚ¿­·Î ¹Ù²Ù´Â Ãß°¡ µ¿ÀÛÀÌ ÇÊ¿äÇÏ´Ù. ¹®ÀÚ¿­À» ´ëüÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇѵ¥ µÎ ¹®ÀÚ¿­ÀÇ ±æÀÌ Â÷À̸¸Å­ µÚÂÊ ¸Þ¸ð¸®¸¦ À̵¿½ÃÄÑ ´ëüÇÒ ¹®ÀÚ¿­ÀÌ µé¾î°¥ °ø°£À» ¸¸µç ÈÄ ÀÌ °ø°£¿¡ ´ëü ¹®ÀÚ¿­À» ½ï Áý¾î ³ÖÀ¸¸é µÈ´Ù.

ÇÑ ÆÄÀÏ¿¡ ´ëÇØ ¹Ù²Ù±â¸¦ ¿Ï·áÇÑ ÈÄ ÀÌ ÆÄÀÏÀ» ´Ù½Ã µð½ºÅ©¿¡ ±â·ÏÇÑ´Ù. ´Ü, ¹«Á¶°Ç ±â·ÏÇÒ ÇÊ¿ä¾øÀÌ ¹Ù²Ù±â¸¦ ÇßÀ» ¶§¸¸ ±â·ÏÇÏ¸é µÈ´Ù. º¯°æµÇÁö ¾ÊÀº ÆÄÀÏÀ» ´Ù½Ã ¾µ ÇÊ¿äµµ ¾øÀ» »Ó´õ·¯ ÀÌ·¸°Ô ÇÏÀÚ¸é ÀüüÀûÀÎ ¹Ù²Ù±â È¿À²ÀÌ ¾öû³ª°Ô ¶³¾îÁö°Ô µÇ¹Ç·Î ²À ÇÊ¿äÇÒ ¶§¸¸ ÆÄÀÏ ¾²±â¸¦ ÇØ¾ß ÇÑ´Ù.