API 에서 지원되는 함수들은 어느정도 제약이 있기 떄문에......



좀 짜증났거든요.....  



물론 만드는게 어렵진 않지만 자주 사용해야 하므로 아예 보관하시고 카피해서 사용하시면 편하실거 같아서요...







#include <windows.h>

#include <stdio.h>

#include <string>



using namespace std;



/*



기존 디렉토리가 있을경우 안만들어지고 없으면 만든다. 부모디렉토리가 없어도 생성가능



*/

void CreateDir(char* Path)

{

  char DirName[256];  //생성할 디렉초리 이름

  char* p = Path;     //인자로 받은 디렉토리

  char* q = DirName;  



  while(*p)

  {

      if (('\\' == *p) || ('/' == *p))   //루트디렉토리 혹은 Sub디렉토리

      {

          if (':' != *(p-1))

          {

              CreateDirectory(DirName, NULL);

          }

      }

      *q++ = *p++;

      *q = '\0';

  }

  CreateDirectory(DirName, NULL);  

}





/*



하위디렉토리를 제외한 해당 디렉토리 모든 파일들을 제거



*/

void DeleteAllFiles(char* folderPath)

{

  char fileFound[256];

  WIN32_FIND_DATA info;

  HANDLE hp;



  sprintf(fileFound, "%s\\*.*", folderPath);

  hp = FindFirstFile(fileFound, &info); //디렉토리에 파일이 있는지 첫번째 파일만.

  do

  {

      sprintf(fileFound,"%s\\%s", folderPath, info.cFileName);

      DeleteFile(fileFound);



  }while(FindNextFile(hp, &info));  //다른 파일이 있을때 까지



  FindClose(hp);

}





/*



해당 하는 디렉토리에 파일이 존재해도  디렉토리가 비어있지 않아도 지울수 있다 .



*/



void EmptyDirectory(char* folderPath)

{

  char fileFound[256];

  WIN32_FIND_DATA info;

  HANDLE hp;



  sprintf(fileFound, "%s\\*.*", folderPath);

  hp = FindFirstFile(fileFound, &info);   //디렉토리에 파일이 있는지 첫번째 파일만.

  do

  {

      if (!((strcmp(info.cFileName, ".")==0)||(strcmp(info.cFileName, "..")==0)))

      {

          if((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)  //Sub디렉토리가 존재하는경우

          {

              string subFolder = folderPath;

              subFolder.append("\\");

              subFolder.append(info.cFileName);

              EmptyDirectory((char*)subFolder.c_str()); /// {return (_Ptr == 0 ? _Nullstr() : _Ptr); }

              RemoveDirectory(subFolder.c_str());

          }

          else

          {

              sprintf(fileFound,"%s\\%s", folderPath, info.cFileName);

              BOOL retVal = DeleteFile(fileFound);

          }

      }



  }while(FindNextFile(hp, &info));



  FindClose(hp);

}

/////////////
아래의 글을 보다가 우연히 제가 가지고 있던 팁중에서도 아래와 비슷하다고 생각하는 내용이 있어,



생각난김에 하나 올려봅니다.



아래의 디렉토리 생성과 유사한데...



만드려고하는 폴더를 full path로 그냥 넣어주기만하면 상위가 없으면 같이 만들어줍니다.



#include <io.h>



BOOL CreateDir(char* pszDir)

{

  BOOL bRet = false;

  int nLen = strlen(pszDir);

  char* pszSubDir = NULL;



  _finddata_t fdata;

  long hFind;

  for (int i = nLen - 1; i >= 0; i--)

  {

      if (pszDir[i] == '\\')

      {

          pszSubDir = new char[i+1];

          memset(pszSubDir, 0, i+1);

          memcpy(pszSubDir, pszDir, i);

          if (hFind = _findfirst(pszSubDir, &fdata) == -1L)

          {

              if (!CreateDir(pszSubDir))

              {

                  delete pszSubDir;

                  return bRet;

              }

          }

          delete pszSubDir;

          break;

      }

  }

   

  bRet = ::CreateDirectory(pszDir, NULL);



  return bRet;

}
////////////////////////////////
Shell 명령을 쓰면 더욱 간단해 집니다.
제가 만든 코드입니다.

bool CheckDirectory(LPCTSTR dir)
{
if (::PathFileExists(dir) && ::PathIsDirectory(dir))
return true;

TCHAR parent[MAX_PATH] = _T("");
lstrcpy(parent, dir);
::PathRemoveFileSpec(parent);
if (CheckDirectory(parent))
return (::CreateDirectory(dir, NULL) != FALSE);
return false;
}
/////////////////////
int SHCreateDirectory(HWND hwnd, LPCWSTR pszPath);

'프로그래밍 > MFC' 카테고리의 다른 글

CCombobox Edit 창 크기 설정  (0) 2015.03.26
WIN32 API프로그래밍에서 MDI에서 자식 생성.  (0) 2013.08.14
쓰레드 생성 (펌글)  (0) 2013.08.14
쓰레드 생성.  (0) 2013.08.14
유니코드  (0) 2013.08.14

+ Recent posts