1.¹é¾÷

°¡.¹é¾÷

¹é¾÷À̶õ ÆÄÀÏÀ» ÀúÀåÇÒ ¶§ ÀÌÀü ÆÄÀÏÀ» µ¤¾î ¾²Áö ¾Ê°í ´Ù¸¥ À̸§À¸·Î µû·Î ÀúÀåÇØ ³õ´Â ±â´ÉÀÌ´Ù. ÆÄÀÏÀ» ¼öÁ¤ÇÑ ÈÄ ÀúÀåÇߴµ¥ ¼öÁ¤Çϱâ ÀüÀÇ ³»¿ëÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù. ÀÌ·² ¶§ ¹é¾÷ ±â´ÉÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ½Ç¼ö·Î Áö¿î ÆÄÀÏÀº ÈÞÁöÅë¿¡¼­ ãÀ» ¼ö ÀÖÁö¸¸ µ¤¾î ¾´ ÆÄÀÏÀº º°µµÀÇ ¹é¾÷À» ÀúÀåÇØ ³õÁö ¾ÊÀ¸¸é º¹±¸ÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ ´ëºÎºÐÀÇ ÅØ½ºÆ® ÆíÁý±â´Â ¹é¾÷ ±â´ÉÀ» Á¦°øÇÑ´Ù. ¹é¾÷Àº È£½ºÆ®°¡ Á¦°øÇÏ´Â ±â´ÉÀ̹ǷΠApiEdit´Â Ưº°È÷ ¼öÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.

´ç±Ù¿¡µµ ÀÌ·± ¹é¾÷ ±â´ÉÀ» ÀÛ¼ºÇØ º¸µÇ ÀϹÝÀûÀÎ ¹é¾÷ ±â´Éº¸´Ù ÈξÀ ´õ ´Ù¾çÇÑ ¹é¾÷ ¿É¼ÇÀ» Á¦°øÇÒ °ÍÀÌ´Ù. ÀÌÀü ÇÁ·ÎÁ§Æ®¸¦ º¹»çÇÏ¿© Dangeun18ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ½Ç½ÀÀ» ÁøÇàÇÏÀÚ. ¸ÕÀú SOption¿¡ Ãß°¡ÇÒ ¿É¼Ç º¯¼öµéÀ» ¸ðµÎ ¼±¾ðÇÑ´Ù. ÀÌ Àå¿¡¼­ »ç¿ëÇÒ ¸ðµç º¯¼ö¿Í °ü¸® Äڵ带 ÇѲ¨¹ø¿¡ Ãß°¡ÇÏ¿© ¿¹ºñ µ¿ÀÛÀ» ¹Ì¸® ÃëÇØ ³õ´Â´Ù.

 

struct SOption

{

     ...

     int BackupLevel;

     TCHAR BackupFolder[MAX_PATH];

     int BackupNaming;

     int AutoSaveInterval;

     BOOL bMakeEditInfo;

     BOOL bUpdateEditInfo;

     TCHAR EditInfoFolder[MAX_PATH];

     int EditInfoMask;

     BOOL bUseEditInfo;

};

 

SOption::Init¿¡¼­ ÀÌ º¯¼öµéÀ» ÃʱâÈ­ÇÑ´Ù. Å×½ºÆ®¿¡ ÇÊ¿äÇÑ °ªÀ¸·Î ÃʱâÈ­ÇßÀ¸¸ç Å×½ºÆ®°¡ ³¡³­ ÈÄ ´Ù½Ã ¹«³­ÇÑ °ªÀ¸·Î Á¶Á¤ÇÒ °ÍÀÌ´Ù.

 

void SOption::Init()

{

     ....

     BackupLevel=1;

     lstrcpy(BackupFolder,"");

     BackupNaming=1;

     AutoSaveInterval=1;

     bMakeEditInfo=TRUE;

     bUpdateEditInfo=TRUE;

     lstrcpy(EditInfoFolder,"");

     EditInfoMask=0x1f;

     bUseEditInfo=TRUE;

}

 

Load, Save¿¡¼­ ÀÌ º¯¼öµéÀ» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÑ´Ù. Setting ¼­ºêŰ¿¡ ÀúÀåÇØ¾ß ÇϹǷΠ¹®¹ý °­Á¶ÀÇ ½ºÅ¸ÀÏÀ» ÀÔ·ÂÇϱâ Àü¿¡ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¾ÕÀå¿¡¼­ Ãß°¡ÇÑ bAutoConvert º¯¼ö ÀÔÃâ·Â¹® ´ÙÀ½¿¡ Äڵ带 Ãß°¡ÇÏ¸é µÈ´Ù.

 

void SOption::Load(TCHAR *Key)

{

     ....

     BackupLevel=SHRegReadInt(SHCU,szKey,"BackupLevel",0);

     SHRegReadString(SHCU,szKey,"BackupFolder","",BackupFolder,256);

     BackupNaming=SHRegReadInt(SHCU,szKey,"BackupNaming",0);

     AutoSaveInterval=SHRegReadInt(SHCU,szKey,"AutoSaveInterval",0);

     bMakeEditInfo=SHRegReadInt(SHCU,szKey,"bMakeEditInfo",0);

     bUpdateEditInfo=SHRegReadInt(SHCU,szKey,"bUpdateEditInfo",0);

     SHRegReadString(SHCU,szKey,"EditInfoFolder","",EditInfoFolder,256);

     EditInfoMask=SHRegReadInt(SHCU,szKey,"EditInfoMask",0);

     bUseEditInfo=SHRegReadInt(SHCU,szKey,"bUseEditInfo",0);

 

void SOption::Save(TCHAR *Key)

{

     ....

     SHRegWriteInt(SHCU,szKey,"BackupLevel",BackupLevel);

     SHRegWriteString(SHCU,szKey,"BackupFolder",BackupFolder);

     SHRegWriteInt(SHCU,szKey,"BackupNaming",BackupNaming);

     SHRegWriteInt(SHCU,szKey,"AutoSaveInterval",AutoSaveInterval);

     SHRegWriteInt(SHCU,szKey,"bMakeEditInfo",bMakeEditInfo);

     SHRegWriteInt(SHCU,szKey,"bUpdateEditInfo",bUpdateEditInfo);

     SHRegWriteString(SHCU,szKey,"EditInfoFolder",EditInfoFolder);

     SHRegWriteInt(SHCU,szKey,"EditInfoMask",EditInfoMask);

     SHRegWriteInt(SHCU,szKey,"bUseEditInfo",bUseEditInfo);

 

»õ·Î Ãß°¡µÈ ¿É¼ÇÀÌ Init¿¡¼­ ÁöÁ¤ÇÑ ÃʱⰪÀ» °¡Áö·Á¸é ·¹Áö½ºÆ®¸®¸¦ ºñ¿ö¾ß ÇϹǷΠ¼³Ä¡ ÇØÁ¦ ÈÄ ´Ù½Ã ½ÇÇàÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸ðµÎ SHRegRead*¿¡¼­ ÁöÁ¤ÇÑ µðÆúÆ®°ªÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. °³¹ßÁßÀ̹ǷΠÁ» ±ÍÂú¾Æµµ ¾î¿ ¼ö ¾ø´Ù. ´ÙÀ½Àº ÀÌ Àå¿¡¼­ ÀÛ¼ºÇÒ ÇÔ¼öÀÇ ¿øÇüµéÀε¥ ÇÔ¼ö°¡ Ãß°¡µÉ ¶§¸¶´Ù Çì´õ ÆÄÀÏ¿¡ ÀÏÀÏÀÌ ¿øÇüÀ» ¼±¾ðÇϱ⠱ÍÂúÀ¸¹Ç·Î Dangeun.h¿¡ ¹Ì¸® ¼±¾ðÇØ µÐ´Ù.

 

void MakeBackupName(TCHAR *Folder,TCHAR *fname,TCHAR *ext,int level,TCHAR *szName);

void MakeBackup(TCHAR *Path);

void AutoSave();

void SaveEditings();

void MakeAssociate(TCHAR *ext, TCHAR *desc);

void UnAssociate(TCHAR *ext);

void RearrangePath();

 

¹é¾÷ °ü·Ã º¯¼ö´Â ´ÙÀ½ ¼¼ °³ÀÌ´Ù. ¹é¾÷ ´Ü°è¿Í ¹é¾÷ ÆÄÀÏÀ» ÀúÀåÇÒ À§Ä¡, ¹é¾÷ ÆÄÀÏÀÇ À̸§ ±ÔÄ¢À» ÁöÁ¤ÇÑ´Ù.

 

º¯¼ö

¼³¸í

BackupLevel

¹é¾÷ ´Ü°èÀÌ´Ù. ´Ù´Ü°è ¹é¾÷ÀÌ °¡´ÉÇѵ¥ 0ÀÌ¸é ¹é¾÷À» ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù.

BackupFolder

¹é¾÷ ÆÄÀÏÀ» ÀúÀåÇÒ Æú´õÀÌ´Ù. ºó ¹®ÀÚ¿­ÀÌ¸é ¹®¼­°¡ ÀÖ´Â Æú´õ¿¡ ÀúÀåÇϴµ¥ ÀÌ·¸°Ô ÇÏ¸é ¹®¼­ Æú´õ°¡ ÁöÀúºÐÇØÁú ¼ö ÀÖÀ¸¹Ç·Î º°µµÀÇ Æú´õ¿¡ ¹é¾÷ ÆÄÀϸ¸ µû·Î ÀúÀåÇÒ ¼öµµ ÀÖ´Ù.

BackupNaming

¹é¾÷ ÆÄÀÏÀÇ À̸§ ±ÔÄ¢ÀÌ´Ù.

 

½ÇÁ¦·Î ¹é¾÷À» ÇÏ´Â ÇÔ¼ö¸¦ Dangeun.cpp¿¡ ÀÛ¼ºÇÑ´Ù. MakeBackupName ÇÔ¼ö´Â ¹é¾÷ ÆÄÀÏÀÇ °æ·Î¿Í À̸§¸¦ °áÁ¤ÇÏ´Â µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù.

 

void MakeBackupName(TCHAR *Folder,TCHAR *fname,TCHAR *ext,int level,TCHAR *szName)

{

     TCHAR szNum[12];

 

     // ù ¹øÂ° ¹é¾÷ ÆÄÀÏ¿¡´Â ¼ýÀÚ¸¦ ºÙÀÌÁø ¾Ê´Â´Ù.

     if (level == 1) {

          szNum[0]=0;

     } else {

          wsprintf(szNum,"%d",level);

     }

 

     // À̸§ ºÙÀ̱⠿ɼǿ¡ µû¶ó ¹®ÀÚ¿­À» Á¶¸³ÇÑ´Ù.

     switch (Option.BackupNaming) {

     case 0:

          wsprintf(szName,"%s%s.bak%s",Folder,fname,szNum);

          break;

     case 1:

          wsprintf(szName,"%s%s_bak%s%s",Folder,fname,szNum,ext);

          break;

     case 2:

          wsprintf(szName,"%s%s_¹é¾÷%s%s",Folder,fname,szNum,ext);

          break;

     case 3:

          wsprintf(szName,"%s%s%s.bak%s",Folder,fname,ext,szNum);

          break;

     }

}

 

Àμö·Î Àü´ÞµÈ Æú´õ, ÆÄÀϸí, È®ÀåÀÚ, ¹é¾÷ ·¹º§´ë·Î ¹é¾÷ ÆÄÀÏÀÇ ¿ÏÀü °æ·Î¸¦ Á¶¸³ÇÏ¿© szNameÀ¸·Î ¸®ÅÏÇÑ´Ù. ¹é¾÷ ÆÄÀÏÀÇ À̸§Àº BakcupNaming ¿É¼Ç¿¡ µû¶ó ´Þ¶óÁö´Âµ¥ ¿øÇϴ´ë·Î ¹é¾÷ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

°ª

¹é¾÷ ÆÄÀÏ

¼³¸í

0

File.bak

È®ÀåÀÚ¸¦ bak·Î º¯°æÇÑ´Ù.

1

File_bak.ext

ÆÄÀÏ À̸§ µÚ¿¡ _bak¸¦ ºÙÀδÙ.

2

File_¹é¾÷.ext

ÆÄÀÏ À̸§ µÚ¿¡ _¹é¾÷À» ºÙÀδÙ.

3

File.ext.bak

ÆÄÀϸí°ú È®ÀåÀÚ ´ÙÀ½¿¡ .bak¸¦ ºÙÀδÙ.

 

´Ù´Ü°è ¹é¾÷½Ã¿¡´Â ÀÏ·Ã ¹øÈ£¸¦ ºÙÀÌµÇ 1Â÷ ¹é¾÷¿¡ ´ëÇØ¼­´Â ¹øÈ£¸¦ ºÙÀÌÁö ¾ÊÀ¸¸ç 2Â÷ ¹é¾÷º»ºÎÅÍ´Â ±¸ºÐÀ» À§ÇØ ¹øÈ£¸¦ ºÙÀδÙ. ¹é¾÷À» ÀÛ¼ºÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.

 

void MakeBackup(TCHAR *Path)

{

     TCHAR Folder[MAX_PATH];

     TCHAR drive[_MAX_DRIVE];

     TCHAR dir[_MAX_DIR];

     TCHAR fname[_MAX_FNAME];

     TCHAR ext[_MAX_EXT];

     int i;

     TCHAR Src[MAX_PATH];

     TCHAR Dest[MAX_PATH];

 

     // ¹é¾÷ ¿É¼ÇÀÌ ¼±ÅõÇÁö ¾Ê¾Ò°Å³ª FTP ÆÄÀÏÀÌ¸é ¹é¾÷ÇÏÁö ¾Ê´Â´Ù.

     if (Option.BackupLevel == 0 || strnicmp(Path,"ftp",3)==0) {

          return;

     }

 

     // ¹é¾÷ Æú´õ°¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ Æú´õ¿¡ ¹é¾÷ÇÑ´Ù.

     _splitpath(Path,drive,dir,fname,ext);

     if (lstrlen(Option.BackupFolder)==0 || _access(Option.BackupFolder,0)!=0) {

          wsprintf(Folder,"%s%s",drive,dir);

     } else {

          lstrcpy(Folder,Option.BackupFolder);

          if (Folder[lstrlen(Folder)-1]!='\\') {

              lstrcat(Folder,"\\");

          }

     }

 

     // ´Ù´Ü°è·Î ¹é¾÷ÇÑ´Ù. ÀÌÀü ´Ü°è ¹é¾÷ ÆÄÀÏÀ» ´ÙÀ½ ´Ü°è·Î º¹»çÇÑ´Ù.

     for (i=Option.BackupLevel;i>0;i--) {

          if (i==1) {

              lstrcpy(Src,Path);

          } else {

              MakeBackupName(Folder,fname,ext,i-1,Src);

          }

          if (_access(Src,0)==0) {

              MakeBackupName(Folder,fname,ext,i,Dest);

              CopyFile(Src,Dest,FALSE);

          }

     }

}

 

Àμö·Î Àü´ÞµÈ Path ÆÄÀÏ¿¡ ´ëÇÑ ¹é¾÷À» ¿É¼Ç º¯¼ö°¡ Áö½ÃÇϴ´ë·Î »ý¼ºÇÑ´Ù. ¹é¾÷ ·¹º§ÀÌ 0À̾ ¹é¾÷ ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾Ê°Å³ª ¿ø°ÝÁöÀÇ FTP ÆÄÀÏÀÌ¸é ¹é¾÷ÇÏÁö ¾Ê´Â´Ù. ¸ÕÀú ¹é¾÷ ÆÄÀÏÀ» ÀÛ¼ºÇÒ Æú´õ¸¦ ±¸Çϴµ¥ BackupFolder ¿É¼Ç¿¡ ÁöÁ¤µÈ Æú´õ°¡ Á¸ÀçÇϸé ÀÌ Æú´õ¸¦ »ç¿ëÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹®¼­°¡ ÀÖ´Â Æú´õ¸¦ »ç¿ëÇÑ´Ù. ¹é¾÷ÇÒ Æú´õ¸¦ °áÁ¤ÇÑ ÈÄ ´Ù´Ü°è ¹é¾÷À» ó¸®Çϴµ¥ ¹é¾÷ ÆÄÀÏÀÇ ³¡¿¡¼­ºÎÅÍ ¹é¾÷À» ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î 3Â÷ ¹é¾÷±îÁö µÇ¾î ÀÖ´Â »óÅ¿¡¼­ ´Ù½Ã ÀúÀåÇÑ´Ù¸é ¹é¾÷ ÆÄÀϵéÀº ´ÙÀ½°ú °°ÀÌ À̵¿µÈ´Ù.

 

i

º¹»ç ¿øº»

º¹»ç ´ë»ó

3

File.bak2

File.bak3

2

File.bak

File.bak2

1

File.ext

File.bak

 

File.bak2 2Â÷ ¹é¾÷ ÆÄÀÏÀÌ File.bak3 3Â÷ ¹é¾÷ ÆÄÀÏ·Î º¹»çµÊÀ¸·Î½á ¿ø·¡ 3Â÷ ¹é¾÷ ÆÄÀÏÀº »ç¶óÁø´Ù. 1Â÷ ¹é¾÷Àº 2Â÷ ¹é¾÷À¸·Î º¹»çµÇ°í ¿øº»Àº 1Â÷ ¹é¾÷ ÆÄÀÏÀÌ µÈ´Ù. ·çÇÁ´Â ¹é¾÷ ·¹º§ÀÇ ³¡¿¡¼­ºÎÅÍ 1±îÁö ÁøÇàµÇ¸ç Src¿¡ ¹é¾÷ ¿øº», Dest¿¡ ¹é¾÷ ´ë»ó ÆÄÀÏÀÇ À̸§À» ±¸ÇÑ ÈÄ CopyFile ÇÔ¼ö·Î º¹»çÇÑ´Ù. ´Ü, i°¡ 1ÀÏ ¶§´Â ¹é¾÷º»ÀÌ ¾Æ´Ñ ¿øº»À» 1Â÷ ¹é¾÷ À̸§À¸·Î º¹»çÇØ¾ß ÇÑ´Ù.

¹é¾÷ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß¿¡ Áß°£ ¹é¾÷ ÆÄÀÏÀÌ ¾ø´Ù¸é ÀÌ ÆÄÀÏÀº ¹«½ÃÇÑ´Ù. ¿¹¸¦ µé¾î 2Â÷ ¹é¾÷ ÆÄÀÏÀÎ File.bak2°¡ ¾ø´Ù¸é ÀÌ ÆÄÀÏÀ» File.bak3·Î º¹»çÇÒ Çʿ䰡 ¾ø´Ù. ±×·¡¾ß ´Ù´Ü°è·Î ¹é¾÷À» ÇÏ´õ¶óµµ »õ·Î ÀúÀåµÇ´Â ÆÄÀÏÀº ºÒÇÊ¿äÇÑ ¹é¾÷ÀÌ »ý¼ºµÇÁö ¾Ê´Â´Ù. ¹é¾÷ÇÒ ½ÃÁ¡Àº ÆÄÀÏÀ» ÀúÀåÇÒ ¶§Àε¥ MakeBackup¿¡¼­ ¸ðµç Á¶°ÇÀ» Á¡°ËÇϹǷΠȣÃâÇϱ⸸ ÇÏ¸é µÈ´Ù.

 

BOOL SaveToFile(HWND hChild,TCHAR *Path)

{

     ....

     if (strnicmp(Path,"http",4)==0) {

          MessageBox(hChild, "HTTP ÇÁ·ÎÅäÄÝÀº ¾÷·Îµå¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÌ À̸§À¸·Î´Â "

              "ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù. »õ À̸§À¸·Î ÇÏµå µð½ºÅ©¿¡ ÀúÀåÇϽʽÿÀ","¾Ë¸²",MB_OK);

          return FALSE;

     }

 

    MakeBackup(Path);

     ....

 

¹é¾÷Àº º°µµÀÇ ÇÏµå µð½ºÅ© °ø°£À» »ç¿ëÇϹǷΠ¹é¾÷ Áß¿¡ ¿ë·®ÀÌ ºÎÁ·ÇØÁö´Â »çŰ¡ ¹ß»ýÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î 10K ÆÄÀÏÀ» ÆíÁýÇØ¼­ 12K·Î ´Ã¾î³µ°í µð½ºÅ© ¿ë·®Àº 8K¸¸ ³²¾Ò´Ù°í ÇØ º¸ÀÚ. ÀÌ °æ¿ì 10K Å©±âÀÇ ¹é¾÷ »ý¼ºÀº ½ÇÆÐÇÏÁö¸¸ ¿øº» ÆÄÀÏ ÀúÀåÀ» À§Çؼ­´Â 2K¸¸ ´õ ÀÖÀ¸¸é µÇ¹Ç·Î ¼º°øÇÒ °ÍÀÌ´Ù. ¹Ý´ë·Î »õ·Î ¸¸µé¾îÁö´Â ¹é¾÷À¸·Î ÀÎÇØ ¿øº» ÆÄÀÏÀÌ ÀúÀåµÇÁö ¸øÇϴ Ư¼öÇÑ °æ¿ìµµ ÀÖÀ» ¼ö Àִµ¥ ´ç±ÙÀº ÀÌ »óȲÀ» ÆÄÀÏ ÀÔÃâ·Â ¿¡·¯·Î ó¸®ÇÑ´Ù. Á» ´õ Áö´ÉÀûÀ¸·Î ÀÛ¼ºÇÑ´Ù¸é ¿ë·®ÀÌ ºÎÁ·ÇÒ ¶§´Â ¹é¾÷ ÀÛ¼ºÀ» Æ÷±âÇÏ°í ¿øº» ÀúÀåÀ» ¿ì¼±ÀûÀ¸·Î ó¸®ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.

³ª.ÀÚµ¿ ÀúÀå

ÀÚµ¿ ÀúÀåÀ̶õ ÁÖ±âÀûÀÎ ½Ã°£ °£°ÝÀ¸·Î ¶Ç´Â ÀÏÁ¤ÇÑ Á¶°ÇÀÌ µÇ¾úÀ» ¶§ ÆíÁý ÆÄÀÏÀ» ÀÚµ¿À¸·Î ÀúÀåÇÏ´Â ±â´ÉÀÌ´Ù. Áß¿äÇÑ ¼Ò½º³ª ¹®¼­ÀÇ °æ¿ì´Â Å×½ºÆ®Áß¿¡ ½Ã½ºÅÛÀÌ ´Ù¿îµÈ´Ù°Å³ª ÇÏ´Â ºÒÀÇÀÇ »ç°í·Î ÀÎÇØ ÆíÁýÁßÀÎ ÆÄÀÏÀ» ÀÒÀ» ¼öµµ Àִµ¥ ÀÌ·± »ç°í¸¦ ¹æÁöÇϱâ À§ÇØ ÀÚµ¿ ÀúÀå ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÚµ¿ ÀúÀåÀº »ç¿ëÀÚÀÇ ¸í½ÃÀûÀÎ ¸í·ÉÀÌ ¾ø´õ¶óµµ ÆÄÀÏÀ» ¾Ë¾Æ¼­ ÀúÀåÇÏ´Â ±â´ÉÀ̹ǷΠÆíÁýÇÏ´ø ¸ðµç ÆÄÀÏÀ» ÀúÀåÇÏ´Â ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù.

 

void AutoSave()

{

     HWND hChild;

     SInfo *pSi;

 

     // ÀúÀå ´ë»ó ÆÄÀϵéÀ» ¸ðµÎ ÀúÀåÇÑ´Ù.

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

          pSi=(SInfo *)GetWindowLongPtr(hChild,0);

          if (strnicmp(pSi->NowFile,"http",4) != 0 &&

              strncmp(pSi->NowFile,"À̸§¾øÀ½",8) != 0 &&

              pSi->Ae.GetReadOnly() == FALSE &&

              pSi->Ae.GetModified() == TRUE) {

              SaveToFile(hChild,pSi->NowFile);

          }

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

 

     // ÇöÀç ºñȰ¼ºÈ­µÈ »óÅÂÀÌ¸é ÆíÁý ¹®¼­ Á¤º¸¸¦ ´Ù½Ã ÀÛ¼ºÇÑ´Ù.

     if (GetForegroundWindow() != g_hFrameWnd) {

          SaveEditings();

     }

}

 

´Ü ÀúÀåÇÒ ¼ö ¾ø°Å³ª ÀúÀåÇÒ Çʿ䰡 ¾ø´Â ÆÄÀÏÀº Á¦¿ÜÇϴµ¥ »õ·Î ¸¸µç ¹®¼­´Â °æ·Î°¡ °áÁ¤µÇÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀÚµ¿ ÀúÀåÇÒ ¼ö ¾øÀ¸¸ç http·Î ´Ù¿î¹ÞÀº ¹®¼­¿Í Àбâ Àü¿ë ¹®¼­µµ ÀúÀåÇÒ ¼ö ¾ø´Ù. ¿­¾î ³õÀº ¸ðµç ¹®¼­¸¦ ¼øÈ¸Çϸ鼭 ÀúÀå °¡´ÉÇϸ鼭 ÆíÁýµÈ ¹®¼­¸¦ ã¾Æ SaveToFile ÇÔ¼ö¸¦ È£ÃâÇÏ¸é º¯°æµÈ ¸ðµç ¹®¼­°¡ ÀúÀåµÉ °ÍÀÌ´Ù.

ÀÌ ±â´ÉÀº º¯°æ °¨½Ã ±â´É°ú ¾à°£ÀÇ Ãæµ¹ÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. ´ç±ÙÀº ¿ÜºÎ¿¡¼­ ÆÄÀÏÀ» ÆíÁýÇÒ °æ¿ì¸¦ ´ëºñÇÏ¿© ºñȰ¼ºÈ­µÉ ¶§ ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. ±×·±µ¥ ºñȰ¼ºÈ­½Ã¿¡ ÀÚµ¿ ÀúÀå ±â´ÉÀÌ µ¿ÀÛÇϸé ÀúÀåÇØ ³õÀº ÆíÁý ÆÄÀÏ Á¤º¸¿Í ´Þ¶óÁ® ÀÚ½ÅÀÌ ÀúÀåÇßÀ¸¸é¼­µµ ÆÄÀÏÀÌ ¿ÜºÎ¿¡¼­ º¯°æµÈ °ÍÀ¸·Î À߸ø ÀνÄÇÑ´Ù. ±×·¡¼­ ÀÚµ¿ ÀúÀåÇÑ ÈÄ ºñȰ¼ºÈ­ »óÅÂÀÏ ¶§´Â ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ´Ù½Ã Á¶»çÇØ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷À» ÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

// ÆíÁýÁßÀÎ ÆÄÀÏÀÇ Á¤º¸¸¦ ÀúÀåÇÑ´Ù.

void SaveEditings()

{

     HWND hChild;

     SInfo *pSi;

     int idx=0;

     HANDLE hFile;

 

     if (Option.bWatchChange && g_ChildNum) {

          if (pEditings) {

              free(pEditings);

          }

          pEditings=(FileInfo *)malloc(sizeof(FileInfo)*(g_ChildNum+1));

          hChild=GetWindow(g_hMDIClient,GW_CHILD);

          while (hChild) {

              pSi=(SInfo *)GetWindowLongPtr(hChild,0);

              if (strncmp(pSi->NowFile,"À̸§¾øÀ½",8) && strnicmp(pSi->NowFile,"http",4)

                   && strnicmp(pSi->NowFile,"ftp",3)) {

                   pEditings[idx].hWnd=hChild;

                   hFile=CreateFile(pSi->NowFile,0,0,NULL,

                        OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

                   if (hFile!=INVALID_HANDLE_VALUE) {

                        pEditings[idx].size=GetFileSize(hFile,NULL);

                        GetFileTime(hFile,NULL,NULL,&pEditings[idx].st);

                        CloseHandle(hFile);

                        idx++;

                   }

              }

              hChild=GetWindow(hChild,GW_HWNDNEXT);

          }

          pEditings[idx].hWnd=NULL;

     }

}

 

OnActivateApp¿¡ ÀÖ´ø ÄÚµå¿Í µ¿ÀÏÇ쵂 ÆíÁý ÆÄÀÏ Á¤º¸°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Â °æ¿ì¸¦ À§ÇØ pEditings¸¦ ¸ÕÀú ÇØÁ¦ÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù. ÀÚµ¿ ÀúÀå ÇÔ¼ö¿¡¼­µµ ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ´Ù½Ã Á¶»çÇØ¾ß ÇϹǷΠº°µµÀÇ ÇÔ¼ö·Î ºÐ¸®Çß´Ù. OnActivateApp¿¡¼­´Â ÀÌ ÇÔ¼ö¸¦ ´ë½Å È£ÃâÇϰí Áö¿ªº¯¼ö hChild´Â »èÁ¦ÇÑ´Ù.

 

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

{

     if (wParam) {

          ....

     } else {

        SaveEditings();

     }

}

 

OnCreate¿¡¼­ ¿É¼Ç Á¤º¸¸¦ ¸ÕÀú ÀÐ¾î º¸°í ÀÚµ¿ ÀúÀå °£°ÝÀÌ 0ÀÌ ¾Æ´Ï¸é 1¹ø ŸÀ̸Ӹ¦ ¼³Ä¡ÇÑ´Ù. AutoSaveIntervalÀº ºÐ ´ÜÀ§·Î ÁöÁ¤µÇ¹Ç·Î ÀÌ ¿É¼Ç º¯¼ö¿¡ 60*1000À» °öÇÑ ÁÖ±â·Î ŸÀ̸Ӹ¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ÀÌ Å¸À̸Ӵ OnDestroy¿¡¼­ ÆÄ±«ÇÑ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {

          ....

     } else {

          ....

     }

 

     if (Option.AutoSaveInterval) {

          SetTimer(hWnd,1,Option.AutoSaveInterval*1000*60,NULL);

     }

     ....

 

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

{

     ....

     KillTimer(hWnd,1);

}

 

ÀÚµ¿ ÀúÀå ±â´ÉÀÌ µ¿ÀÛÁßÀÏ ¶§´Â ÁֱⰡ ±²ÀåÈ÷ ´À¸° ŸÀÌ¸Ó Çϳª°¡ µ¹¾Æ°£´Ù. ¾î·µç ÀÚµ¿ ÀúÀå ½ÃÁ¡ÀÌ µÇ¸é WM_TIMER ¸Þ½ÃÁö°¡ Àü´ÞµÉ °ÍÀ̰í OnTimer¿¡¼­ ÁÖ±âÀûÀ¸·Î ÀÚµ¿ ÀúÀå ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

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

{

     ....

     switch (wParam) {

     case 1:

          AutoSave();

          break;

 

AutoSave ÇÔ¼ö´Â º¯°æµÈ ¸ðµç ¹®¼­¸¦ ÀúÀåÇϹǷΠÀÌ Áֱ⿡ ¸ÂÃç ¸ðµç ¹®¼­°¡ ÀúÀåµÉ °ÍÀÌ´Ù. ÀÚµ¿ ÀúÀå ±â´ÉÀÌ ÄÑÁ® ÀÖ´õ¶óµµ º¯°æµÈ ¹®¼­°¡ ¾øÀ¸¸é ¾Æ¹« Àϵµ ÀϾÁö ¾ÊÀ¸¹Ç·Î ÀÌ ±â´ÉÀ¸·Î ÀÎÇØ ´ç±ÙÀÌ ´À·ÁÁö°Å³ª ÇÏÁö´Â ¾Ê´Â´Ù.