#include <stdio.h>

#include <direct.h>    // chdir


#ifndef _MAX_PATH

#define _MAX_PATH    260

#endif // _MAX_PATH


int main(){

char strBuffer[_MAX_PATH]={0,};

char strChangeDir[_MAX_PATH]={"..\\"};


char *pStrBuffer = NULL;

pStrBuffer = _getcwd(strBuffer, _MAX_PATH);

printf("Beginning path : %s\n", strBuffer);


int nResult = _chdir(strChangeDir);

if ( nResult == 0 ){

printf( "Successed\n" );

pStrBuffer = _getcwd(strBuffer, _MAX_PATH);

printf( "Ending path : %s\n", strBuffer);

} else {

perror( "Failed" );

}


return 0;

}







< 테스트 결과 (Result of test) >


#include <stdio.h>


#pragma warning(disable: 4996)


int main(){

FILE *pFile;

pFile = fopen("MakeAFile.txt", "w");

if ( pFile != NULL ){

fputs("fopen example", pFile);

fclose(pFile);

}


return 0;

}


#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <map>
#include <iterator>
#include <string>
#include <fstream>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <strings.h>
#include <memory.h>
#include <stdlib.h>

using namespace std;

typedef map<string, bool> FILE_LIST;

class CFileList
{
public:
    CFileList();
    ~CFileList();

public:
    bool GetFileList(FILE_LIST& list, string strDir); //디렉토리 및 파일목록을 구한다
    void ShowFileList(FILE_LIST& list);//리스트를 출력한다
};

CFileList::CFileList()
{
}

CFileList::~CFileList()
{
}

bool CFileList::GetFileList(FILE_LIST& list, string strDir)
{
    struct stat statinfo;
    memset(&statinfo, 0, sizeof(statinfo));
    lstat(strDir.c_str(), &statinfo);
    if(!S_ISDIR(statinfo.st_mode))
    {
        cout<<strDir + " is not directory"<<endl;
        return false;
    }

    DIR *dir;
    struct dirent *entry;

     if ((dir = opendir(strDir.c_str())) == NULL)
     {
         cout<<strDir + " open error"<<endl;
        return false;
     }

    while ((entry = readdir(dir)) != NULL)
    {
        memset(&statinfo, 0, sizeof(statinfo));
        string strFilePath = strDir + "/" + entry->d_name;
        while(strFilePath.find("//") != string::npos)
                strFilePath.replace(strFilePath.find("//"), 2, "/");

        lstat(strFilePath.c_str(), &statinfo);

        if(S_ISDIR(statinfo.st_mode)) // 디렉토리 이면
        {
            if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                continue;

            list.insert(pair<string, bool>(strFilePath, true)); //디렉토리 경로를 넣음

 
            string strSubDir = strDir + "/" + entry->d_name;
            GetFileList(list, strSubDir); //디렉토리 안으로 들어감
        }
        else
        {
            //파일이면
            list.insert(pair<string, bool>(strFilePath, false)); //파일경로를 넣음
        }
    }

    //읽은 디렉토리 닫기
     closedir(dir);

    return true;
}

void CFileList::ShowFileList(FILE_LIST& list)
{
    //  특정 폴더 위치
    char path[] = "/media/HP01049471071/2015Y/Image/"; 
   
    FILE_LIST::iterator itr;
    cout << "[ShowFileList] : " << endl;
    for(itr = list.begin(); itr != list.end(); itr++)
    {
        if ( itr->second == true )
        {  
            //  exclude directory
            cout<<"[DIRECTORY] " + itr->first<<endl;
        }
        else
        {
            //  string to char
            char *fileName = new char[(itr->first).length()+1];
            strcpy(fileName,(itr->first).c_str()); 
           
            //  Make a command sentence
            char cmd[1024];
            sprintf(cmd, "mv %s %s", fileName, path );
            sprintf(cmd, "cp %s %s", fileName, path );

            //  move / copy
            system(cmd);

            //  release
            free(fileName);
        }
    }
}

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        cout<<"usage: filelist [directory path]"<<endl;
        return 1;
    }

    CFileList FileList;

    string strSrcDir = argv[1];

    FILE_LIST file_list;

    FileList.GetFileList(file_list, strSrcDir);
    FileList.ShowFileList(file_list);

    return 0;
}

//    폴더목록 출력(하위 디렉토리 포함)

#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <map>
#include <iterator>
#include <string>
#include <fstream>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <strings.h>
#include <memory.h>
#include <stdlib.h>

using namespace std;

typedef map<string, bool> FILE_LIST;

class CFileList
{
public:
    CFileList();
    ~CFileList();

public:
    bool GetFileList(FILE_LIST& list, string strDir); //디렉토리 및 파일목록을 구한다
    void ShowFileList(FILE_LIST& list);//리스트를 출력한다
};

CFileList::CFileList()
{
}

CFileList::~CFileList()
{
}

bool CFileList::GetFileList(FILE_LIST& list, string strDir)
{
    struct stat statinfo;
    memset(&statinfo, 0, sizeof(statinfo));
    lstat(strDir.c_str(), &statinfo);
    if(!S_ISDIR(statinfo.st_mode))
    {
        cout<<strDir + " is not directory"<<endl;
        return false;
    }

    DIR *dir;
    struct dirent *entry;

     if ((dir = opendir(strDir.c_str())) == NULL)
     {
         cout<<strDir + " open error"<<endl;
        return false;
     }

    while ((entry = readdir(dir)) != NULL)
    {
        memset(&statinfo, 0, sizeof(statinfo));
        string strFilePath = strDir + "/" + entry->d_name;
        while(strFilePath.find("//") != string::npos)
                strFilePath.replace(strFilePath.find("//"), 2, "/");

        lstat(strFilePath.c_str(), &statinfo);

        if(S_ISDIR(statinfo.st_mode)) // 디렉토리 이면
        {
            if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                continue;


            list.insert(pair<string, bool>(strFilePath, true)); //디렉토리 경로를 넣음

            string strSubDir = strDir + "/" + entry->d_name;
            GetFileList(list, strSubDir); //디렉토리 안으로 들어감
        }
        else
        {
            //파일이면
            list.insert(pair<string, bool>(strFilePath, false)); //파일경로를 넣음
        }
    }

    //읽은 디렉토리 닫기
     closedir(dir);

    return true;
}

void CFileList::ShowFileList(FILE_LIST& list)
{
    FILE_LIST::iterator itr;
    for(itr = list.begin(); itr != list.end(); itr++)
    {
        if ( itr->second == true )
            cout<<"[DIRECTORY] " + itr->first<<endl;
        else
            cout<<"[FILE] " + itr->first<<endl;
    }
}

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        cout<<"usage: filelist [directory path]"<<endl;
        return 1;
    }

    CFileList FileList;

    string strSrcDir = argv[1];

    FILE_LIST file_list;

    FileList.GetFileList(file_list, strSrcDir);
    FileList.ShowFileList(file_list);

    return 0;
}

//    현재폴더 목록만 출력하는 소스

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>


int main()
{
     DIR            *dir_info;
    struct dirent  *dir_entry;

    dir_info = opendir( ".");              // 현재 디렉토리를 열기
    if ( NULL != dir_info)
    {
        while( dir_entry   = readdir( dir_info))  // 디렉토리 안에 있는 모든 파일과 디렉토리 출력
        {
            printf( "%s\n", dir_entry->d_name);
        }
        closedir( dir_info);
    }
}



  1. 구성 속성 -> 링커 -> 디버깅 -> 디버그 정보 생성 : 예(/DEBUG) 로 체크
  2. 구성 속성 -> C/C++ -> 최적화 -> 최적화 : 사용 안함 (/Od)로 체크
  3. 도구 -> 옵션 -> 디버깅 -> 일반 -> 소스 파일이 원래 버전과 정확하게 일치해야 함 : 체크 해제


  1. ㅗ허 2017.06.03 21:36 신고

    감사합니다

이론은 다른데에서 보시구요~

그냥  "char *"를 인자로 받아가지고 사용하는 방법을 나타냈습니다.


그냥 소스로 설명.... ㅋㅋ




void func(char *p, ...);


void main()

{

func("Hi", "man", "boy");

}



void func(char *p, ...)

{

va_list ap;

char *target, buf[_MAX_DIR];

int i = 0;


target = va_start(ap, p);

vsprintf(buf, p, ap);

do

{

if (i++ != 0)

{

sprintf(buf, target);

}

// using this 

}while((target = va_arg(ap, char *)) != NULL);

va_end(ap);

}


간단히 설명 하자면, "main" 에서 함수를 사용한다. 

여기서 인자는 "Hi", "man" and "boy" 3개를 함수("func")에 넘긴다.


그다음 함수("func")에서는 다음과 같다.

va_list 인자 생성 하고 사용할 변수를 선언한다. 여기서 "i"는  내가 기술이 부족하여 첫번째는 "target"에 바로 받았고, 두번째는 "buf"에 넣기 위해서다. (이상하게 첫번째는 "vsprintf"를 사용해야 하며, 두번재는 "sprintf"를 사용하니깐.... 잘되더라....

"while"문을 조건을 주면서 다음 인자를 받아오며, "va_end"로 마친다.




CString A;

A.Format(TEXT(" str %d "), m_nTotalFrame);

OutputDebugString(A);


이렇게 하면 되겠죠?

"stdafx.h" 파일에 다음과 같이 삽입하고 사용하면 된다.



#ifdef _DEBUG

#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")

#endif

LOGFONT	lf;
memset(&lf,	0,	sizeof(lf));
strcpy(lf.lfFaceName, "Verdana");

에서 위의 문제가 발생한다. 이것을 다음과 같이 바꿔 사용하면 된다.

LOGFONT lf; memset(&lf, 0, sizeof(lf)); wcscpy_s(lf.lfFaceName, _T("Verdana"));

+ Recent posts

티스토리 툴바