특정 디렉토리 아래에 있는 모든 파일과 디렉토리 혹은 특정 조건의 파일과 디렉토리를 얻고자 한다면, 다음 API 함수를 이용한다.

HANDLE FindFirstFile(LPCSTR lpFileName, LPWIN32_FIND_DATA finddata);
BOOL FindNextFile(HANDLE hFind, LPWIN32_FIND_DATA finddata);
BOOL FindClose(HANDLE hFind);


FindFirstFile : 파일 검색을 시작한다.
파일 검색 문자열이 잘못되었거나 다른 이유로 함수 실행이 실패했을 경우 INVALID_HANDLE_VALUE로 Define된 상수값을 반환한다. 성공했을 경우 파일 검색 핸들을 반환하고 두 번째로 전달되는 구조체에 첫 번째로 발견되는 파일의 정보를 넣어준다.

LPCSTR lpFileName
파일 검색 문자열을 넘겨준다.
예) "c:\*.*" 혹은 "c:\*.txt"

LPWIN32_FIND_DATA finddata
파일 검색 데이터 구조체의 포인터를 넘겨준다.


FindNextFile : 다음 파일의 정보를 얻는다.
함수 실행이 성공하였을 경우 TRUE를, 실패하였을 경우 FALSE를 반환한다. 함수 성공시 두 번째 인자로 전해지는 구조체에 파일의 정보를 넣어준다.

HANDLE hFind
FindFirstFile이 반환한 파일 검색 핸들을 넘겨준다.

LPWIN32_FIND_DATA finddata
파일 검색 데이터 구조체의 포인터를 넘겨준다.

FileClose
: 파일 핸들을 닫는다.
FindFirstFile에 의해 열린 파일 핸들을 닫는다. 성공하였을 경우 TRUE를, 실패하였을 경우 FALSE를 반환한다.
HANDLE hFind
FindFirstFile이 반환한 파일 검색 핸들을 넘겨준다.


 실제 사용 예는 다음과 같다.

Windows 디렉토리의 모든 파일 및 폴더 출력 (Language : c)
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.     WIN32_FIND_DATA FindData;
  8.     HANDLE hFind;
  9.     char path[255];
  10.  
  11.     strcpy(path, "c:\\windows\\*");
  12.    
  13.     hFind = FindFirstFile((LPCSTR)path, &FindData);
  14.     if(hFind==INVALID_HANDLE_VALUE)
  15.         return 0;
  16.    
  17.     do
  18.     {
  19.         printf ("%s\n", FindData.cFileName);
  20.     }while(FindNextFile(hFind, &FindData));
  21.  
  22.     FindClose(hFind);
  23.  
  24.     return 0;
  25. }


(2003/2005)LPCSTR 캐스팅에 문제가 있는 경우 Project -> Properties -> Configuration Properties -> General -> Character Set을 Not Set으로 설정하기 바랍니다.


2008년 1월 19일 이후 작성된 모든 글에 대해서 퍼가는 것을 금지합니다.
퍼가고자 하시는 분은 링크를 달아 주시기 바랍니다.
Posted by Harry

일반 Console Application으로 프로그램을 개발할 때 실행 프로그램 자기 자신의 경로를 알아내기 위해서는 매개변수로 넘어오는 argv와 argc를 참조하면 된다. 다음 소스를 보자.

Print my file name (Language : c)
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.     printf ("%s\n", argv[0]);
  6.     return 0;
  7. }

 
위의 프로그램의 실행파일 이름이 "test.exe"라면, 위 프로그램을 실행시켰을 때 "test.exe"가 출력이 된다. 하지만 이 방법은 매개변수로 다른 값을 넘겨받는 WINAPI 프로그램에서는 사용할 수가 없다. 때문에 GetModuleFileName이라는 API 함수를 이용하여 자신의 파일 경로를 알아냈 수 있다.

Documentation 보기!


간단히 설명하자면 다음과 같다.
먼저 첫 번째 매개변수에는 Module의 핸들을 넣어주어야 하는데 일반적으로 NULL을 넘겨 주어도 무방하다. 두 번째 매개변수에는 파일 경로를 저장할 문자열 포인터를 넘겨준다. 세 번째 매개변수에는 두 번째로 넘겨 준 문자열의 길이를 넘겨준다.

실제 사용 예는 다음과 같다.

Example - GetModuleFileName (Language : c)
  1. char FullPath[255];
  2.  
  3. GetModuleFileName(NULL, FullPath, 255);

위 소스는 FullPath에 자신의 경로를 저장해 준다.

참고적으로, 첫 번째 방법은 실행파일명(ex - "test.exe")만을 알아낼 수 있지만, 두 번째 방법은 절대 경로(ex - "c:\test\test.exe")를 알아낼 수 있다.


2008년 1월 19일 이후 작성된 모든 글에 대해서 퍼가는 것을 금지합니다.
퍼가고자 하시는 분은 링크를 달아 주시기 바랍니다.
Posted by Harry
PHP에서 랜덤함수를 사용하는 방법은 C와 별반 차이가 없습니다.

제일 먼저, C에서와 같이 seed를 선택해줍니다. 즉, 여러 개의 난수표에서 하나를 고른다는 것이죠. C와 마찬가지로 srand()라는 함수를 사용하며, 인자값으로는 사용중인 시스템의 시간을 얻는 함수인 microtime()을 씁니다.

그 다음에는 rand함수를 이용하여 난수를 발생시키면 됩니다. rand 함수는 매개변수 두 개를 받아 하나의 정수를 리턴하는 함수입니다. rand 함수의 매개변수 두 개는 각각 반환될 값의 최소값과 최대값입니다. 즉, rand(10, 50)과 같이 함수를 호출하면 이 함수는 10이상 50이하의 정수 중 하나를 리턴합니다.


더 자세한 것은 다음 링크를 참조하시기 바랍니다.

srand() : http://kr2.php.net/manual/kr/function.srand.php
microtime() : http://kr2.php.net/manual/kr/function.microtime.php
rand() : http://kr2.php.net/manual/kr/function.rand.php

documentation 활용을 생활화합시다!


2008년 1월 19일 이후 작성된 모든 글에 대해서 퍼가는 것을 금지합니다.
퍼가고자 하시는 분은 링크를 달아 주시기 바랍니다.
Posted by Harry
일반적으로 프로그래밍 언어는 고급 언어저급 언어로 분류한다.
이 때, 고급이라는 말과 저급이라는 말은 프로그래밍 언어의 좋고 나쁨을 따지는 것이 아니고, 얼마나 인간에게 가까운가, 혹은 컴퓨터에게 가까운가를 기준으로 정하는 것이다. 고급 언어와 저급 언어를 나누는 절대적인 기준은 없으며, 다만 상대적으로 고급, 저급을 따질 수 있다.

고급 언어 인간이 쓰는 언어에 가까운 언어를 말한다. 문법이 영어 문법과 매우 흡사하며, 배우기 쉽다. 특정 하드웨어에 구속받지 않는다. 베이직 언어가 대표적인 고급 언어 중 하나이다.

저급 언어는 인간이 쓰기는 어렵지만 컴퓨터가 쓰기 쉽게 되어있는 언어이다. 이진 코드 자체의 문법이 드러나는 경우가 많으며 하드웨어에 대한 직접적인 접근이 가능하여 드라이버 제작 등에 쓰이기도 한다. 배우기는 어렵지만 하드웨어에 직접접근이 가능하여 다양한 기능의 구현이 가능하다. 기계어와 어셈블리어 등이 이에 속한다.

프로그래밍 언어로는 C언어, 포트란, 파스칼, 알골, 베이직, 어셈블리 등이 있는데, 이들을 둘로 쪼개어 고급 언어와 저급 언어로 나누는 것은 힘들다. 하지만 서로간의 상대적인 고급/저급은 따질 수 있다. 가장 보편적으로 쓰이는 프로그래밍 언어인 C 언어는 배우기 어렵지 않으면서도 하드웨어에 어느 정도까지 접근이 가능하기 때문에 고급 언어와 저급 언어의 중간 정도 되는 언어라고 볼 수 있다.


2008년 1월 19일 이후 작성된 모든 글에 대해서 퍼가는 것을 금지합니다.
퍼가고자 하시는 분은 링크를 달아 주시기 바랍니다.
Posted by Harry