mfc 를 하다보면 하위디렉토리 없어서 죽는 경우가 많다.


중요한건 죽어도 제어하기 힘들다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void mkdirs(const CString directory)
{
    CString tmpDirectory = directory;
 
    // 변수로 받은것은 무조건 폴더로 가정하여 해당 경로에 붙여준다.  
    tmpDirectory.Replace(_T('/'), _T('\\'));
     
    if (directory.Right(1).Compare(_T("\\"))) {
        tmpDirectory += (CString)_T('\\');
    }
 
    CString preDirectory;
    int nStart = 0;
    int nEnd;
 
    // 경로를 반복하여 반복 수행
    while ((nEnd = tmpDirectory.Find('\\', nStart)) >= 0)
    {
        CString csToken = directory.Mid(nStart, nEnd - nStart);
        CreateDirectory(preDirectory + csToken, NULL);
        preDirectory += csToken;
        preDirectory += _T('\\');
        nStart = nEnd + 1;
    }
}
 

위 방법 또는 아니면 

구분자(\)를 확인 후 mkdir 생성 후, chdir 를 반복해서 사용하면 만들수 있다.


'Program > MFC' 카테고리의 다른 글

Dialog 프로그램 시, Argument 받는 방법  (0) 2014.12.02
폴더 유/무 확인하도록 하는것  (0) 2014.12.01
mfc split 사용하기  (0) 2014.10.23
Posted by PARK37
,

예전 개발 할때, Dialog base 에서 개발할 때, Argument 넘기는 방법을 몰라서 정리한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Argument 갯수를 확인
int argment = __argc;
 
// 실제로 동작시, Argument 의 갯수가 맛는지 비교 구문 삽입
// -만약 틀린 경우 해당 프로그램을 실행 못하도록 구성
if(argment != 2)
{
// Debug 모드에서만 MessageBox 실행 되도록 구성
#ifdef  _DEBUG
    ::AfxMessageBox(_T("Invalid Argument"));
#endif
    return FALSE;
}
 
CTestDlg dlg;
// CTestDlgDlg 에 미리 생성시킨 메소드에 Argument 전달
dlg.setInfo(__targv[1]);


몰론 Dialog base 에 setInfo 라는 메소드를 추가해야 한다.
(이건 자동으로 생성 되지 않는다.)

취향에 맞추어서 만들면 될 듯 싶다.

'Program > MFC' 카테고리의 다른 글

디렉토리 생성(하위디렉토리 생성)  (0) 2015.02.09
폴더 유/무 확인하도록 하는것  (0) 2014.12.01
mfc split 사용하기  (0) 2014.10.23
Posted by PARK37
,
폴더 및 파일 유/무 체크하기 쫌 많이 귀찮다. 

간단하게만 확인하면  쓰기 좋지 않을까 싶어서 함수로 만들어 쓴다.

 
1
2
3
4
5
6
7
8
9
10
11
bool IsExistFolder(const CString folderPath)
{
    bool bRet = true;
    DWORD dRet = ::GetFileAttributes(folderPath);
 
    if (dRet == INVALID_FILE_ATTRIBUTES)
    {
        bRet = false;
    }
    return bRet;
}

GetFileAttributes 를 사용을 하면 간단하게 구할수 있다.

실패 일때 INVALID_FILE_ATTRIBUTES(-1) 리턴이 된다.

성공일때는 지정된 파일 또는 디렉토리 속성을 가지고 온다.

내 설명이 이해가 안되면 아래있는 참고 사이트 보면 이해가 확 될 듯 싶다.

참고 사이트 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx


'Program > MFC' 카테고리의 다른 글

디렉토리 생성(하위디렉토리 생성)  (0) 2015.02.09
Dialog 프로그램 시, Argument 받는 방법  (0) 2014.12.02
mfc split 사용하기  (0) 2014.10.23
Posted by PARK37
,

mfc split 사용하기

Program/MFC 2014. 10. 23. 10:11

가끔 프로그램을 하다가 보면 문자열 나눌일이 있다.

Java 나 C# 같은 경우 split 라는 메소드가 있다.

사용하기 짱 편하다

MFC 에는 그런 기능이 없다

그래서 그냥 내가 만들어 쓰기로 했다;;;;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int splitString(CString str, CString var, CStringArray &strs)
{
    int count = 0;
 
    CString tempStr = str;
 
    int length = str.GetLength();
 
    while(length)
    {
        int find = tempStr.Find(var);
        if(find != -1)
        {
            CString temp  = tempStr.Left(find);
            int varLen = _tcslen(var);
            tempStr = tempStr.Mid(find + varLen);
            count++;
        }
        else
        {
            strs.Add(tempStr);
            length = 0;
        }
    }
    return count;
}

실행 소스 

1
2
3
4
5
6
7
8
9
10
11
12
13
CString temp = _T("test,,test1,,test2");
 
CStringArray str;
 
int count = splitString(temp, _T(",,"), str);
 
if(count)
{
    for(int i = 0 ; i <  count  ; i++)
    {
        ::AfxMessageBox(str.GetAt(i));
    }
}

위 방법대로 실행 시키면 CStringArray 로 추출이 된다.

개인적으로 메모리 선언하고 해제하고 하는 방식은 싫어해서 그냥 MS 에서 제공하는 것으로 사용을 한다.

참고사항 : Visual Studio 2008 C++ 버전으로 만들어 놓은것


Posted by PARK37
,