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);
좀 짜증났거든요.....
물론 만드는게 어렵진 않지만 자주 사용해야 하므로 아예 보관하시고 카피해서 사용하시면 편하실거 같아서요...
#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 |