ÆÄÀÏ¿¡¼ ¹Ù²Ù±â´Â ¹®ÀÚ¿À» °Ë»öÇÏ´Â ¹æ¹ýÀº µ¿ÀÏÇÏÁö¸¸ Á¶°Ç¿¡ ¸Â´Â ¹®ÀÚ¿ÀÌ ¹ß°ßµÇ¸é ÆÄÀÏÀ» º¯°æÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼ Á¶±Ý ´õ º¹ÀâÇÏ´Ù. °Ë»ö°á°ú ÆÄÀÏÀÌ ´õ Ä¿Áú ¼ö Àֱ⠶§¹®¿¡ ÆÄÀÏ Å©±â¸¸ÅÀÇ °íÁ¤ ±æÀÌ ¹öÆÛ¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç µ¿ÀûÀ¸·Î ¹öÆÛ Å©±â¸¦ °ü¸®ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¡®¿ì¸®³ª¶ó¡¯¸¦ ¡®´ëÇѹα¹¡¯À̳ª ¡®Çѱ¹¡¯À¸·Î ¹Ù²Ù¸é º° ¹®Á¦°¡ ¾øÁö¸¸ ¡®¿Á¶³¸Þ¡¯¸¦ ¡®¿Á»ó¿¡¼ ¶³¾îÁø ¸ÞÁÖ¡¯·Î ¹Ù²Û´Ù¸é ÆÄÀÏ Å©±â°¡ ´Ã¾î³¯ °ÍÀÌ´Ù.
¿¡±¸ ±×±îÁþ °Å ´Ã¾î³ª ºÁ¾ß ¾ó¸¶³ª ´Ã¾î³ª°Ú´À³Ä°í ¾à°£ÀÇ ¿©À¯ºÐÀ» ÁÖ´Â Á¤µµ·Î ¹®Á¦°¡ ÇØ°áµÉ °ÍÀ¸·Î ¾ÈÀÏÇÏ°Ô »ý°¢Çؼ´Â ¾ÈµÈ´Ù. °Ë»ö°á°ú°¡ ¸¹À¸¸é ¸¹À»¼ö·Ï ´ëüµÇ´Â ¹®ÀÚ¿ÀÌ ±æ¼ö·Ï ÇÊ¿äÇÑ ¹öÆÛ Å©±â°¡ ´õ Ä¿Áø´Ù. ¹öÆÛ°¡ Ä¿Áö´Â Á¤µµ°¡ ¹®Á¦°¡ ¾Æ´Ï¶ó ¾ó¸¶³ª Ä¿ÁúÁö ¹Ì¸® ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ ¹®Á¦´Ù. ±Ø´ÜÀûÀÎ ¿¹¸¦ µéÀÚ¸é ¡®¾Ö±¹°¡¡¯¸¦ ¡®µ¿Çع°°ú ¹éµÎ»êÀÌ ..... Ã漺Çϼ¼¡¯·Î ¹Ù²Ù¸é ¾à°£ÀÌ ¾Æ´Ï¶ó ¸î ¹è·Î Ä¿Á® ¹ö¸± °ÍÀÌ´Ù.
±×·¡¼ ÆÄÀÏ¿¡¼ ¹Ù²Ù±â¸¦ ÇÒ ¶§´Â ÀÏ´Ü ÆÄÀÏÀÇ Å©±â¿¡ ¾à°£ÀÇ ¿©À¯ºÐÀ» Áà ¸Þ¸ð¸®¸¦ ÇÒ´çÇ쵂 ¹®ÀÚ¿ÀÌ ´ëüµÉ ¶§¸¶´Ù ³²Àº ¿©À¯ºÐÀÌ ÃæºÐÇÑÁö Á¡°ËÇØ¾ß ÇÑ´Ù. ÀÌ·± ½ÄÀÇ ¸Þ¸ð¸®°ü¸®´Â ¾Õ¿¡¼ ¿©·¯ ¹ø ½Ç½ÀÇÑ ÀûÀÌ ÀÖ¾î¼ ÀÌÁ¦´Â ¾ÆÁÖ Àͼ÷ÇÒ °ÍÀÌ´Ù. ´ÙÀ½Àº ÆÄÀÏ¿¡¼ ¹Ù²Ù±â¸¦ ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼öµµ 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 ÇÔ¼ö¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇ쵂 °Ë»öµÈ ¹®ÀÚ¿À» ´ëü ¹®ÀÚ¿·Î ¹Ù²Ù´Â Ãß°¡ µ¿ÀÛÀÌ ÇÊ¿äÇÏ´Ù. ¹®ÀÚ¿À» ´ëüÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇѵ¥ µÎ ¹®ÀÚ¿ÀÇ ±æÀÌ Â÷À̸¸Å µÚÂÊ ¸Þ¸ð¸®¸¦ À̵¿½ÃÄÑ ´ëüÇÒ ¹®ÀÚ¿ÀÌ µé¾î°¥ °ø°£À» ¸¸µç ÈÄ ÀÌ °ø°£¿¡ ´ëü ¹®ÀÚ¿À» ½ï Áý¾î ³ÖÀ¸¸é µÈ´Ù.
ÇÑ ÆÄÀÏ¿¡ ´ëÇØ ¹Ù²Ù±â¸¦ ¿Ï·áÇÑ ÈÄ ÀÌ ÆÄÀÏÀ» ´Ù½Ã µð½ºÅ©¿¡ ±â·ÏÇÑ´Ù. ´Ü, ¹«Á¶°Ç ±â·ÏÇÒ ÇÊ¿ä¾øÀÌ ¹Ù²Ù±â¸¦ ÇßÀ» ¶§¸¸ ±â·ÏÇÏ¸é µÈ´Ù. º¯°æµÇÁö ¾ÊÀº ÆÄÀÏÀ» ´Ù½Ã ¾µ ÇÊ¿äµµ ¾øÀ» »Ó´õ·¯ ÀÌ·¸°Ô ÇÏÀÚ¸é ÀüüÀûÀÎ ¹Ù²Ù±â È¿À²ÀÌ ¾öû³ª°Ô ¶³¾îÁö°Ô µÇ¹Ç·Î ²À ÇÊ¿äÇÒ ¶§¸¸ ÆÄÀÏ ¾²±â¸¦ ÇØ¾ß ÇÑ´Ù.