/*--------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <windows.h>
extern int get_subpath(char *, char *);
extern int get_filename(char *, char *);
extern char *strrstr(char *,char *);
/*=============================================================*/
int main(int argc,char *argv[])
{
int rc;
char gdir[MAX_PATH],gfile[MAX_PATH], *p;
if(argc!=2) {
printf("使い方 FileSearch D:TEMPPZ*.* n");
exit(1);
}
p =strrstr(argv[1],""); /* 引数の最後の を検索 */
strncpy(gdir,argv[1],p-argv[1]); /* パス部分 */
gdir[p-argv[1]] =0x00;
strcpy(gfile,++p); /* ファイル部分 */
rc =get_subpath(gdir,gfile);
exit(rc);
}
/*------------------------------------------------*/
/* サブディレクトリの検出 */
/* gdir: 検索するフォルダ gfile: 検索するファイル */
/*------------------------------------------------*/
int get_subpath(char *gdir, char *gfile)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
BOOL bRet = TRUE;
char kpath[MAX_PATH];
char ksubdir[MAX_PATH];
int rc;
if (strlen(gdir) > MAX_PATH -(strlen(gfile)+2) ) {
return 1;
}
sprintf(kpath,"%s*.*",gdir);
hFind = FindFirstFile(kpath, &FindFileData);
while ( hFind != INVALID_HANDLE_VALUE && bRet )
{
/* . でも .. でもない時 */
if((strcmp(FindFileData.cFileName, ".")!=0) &&
(strcmp(FindFileData.cFileName, "..")!=0)) {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
sprintf(ksubdir,"%s%s",gdir, FindFileData.cFileName);
rc =get_subpath(ksubdir, gfile); /* 再帰呼び出し */
}
}
bRet =FindNextFile(hFind, &FindFileData);
}
/* パスの最後まで来たから指定のファイル検索する */
get_filename(gdir,gfile);
FindClose(hFind);
return 0;
}
/*------------------------------------------------*/
/* 指示ファイルの検索 & 出力 */
/* gdir: 検索するフォルダ gfile: 検索するファイル */
/*------------------------------------------------*/
int get_filename(char *gdir, char *gfile)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
BOOL bRet = TRUE;
char kpath[MAX_PATH];
if (strlen(gdir) > MAX_PATH -(strlen(gfile)+2) ) {
return 1;
}
sprintf(kpath,"%s%s", gdir,gfile);
hFind = FindFirstFile(kpath, &fd );
while ( hFind != INVALID_HANDLE_VALUE && bRet )
{
/* ディレクトリ かどうか */
if ( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
printf("%s%sn",gdir,fd.cFileName);
}
bRet = FindNextFile( hFind, &fd );
}
FindClose( hFind );
return 0;
}
/*------------------------------------------------*/
/* 文字列 str 内の最後の key のあるアドレス */
/*------------------------------------------------*/
char *strrstr(char *str,char *key)
{
int n,i,ln;
char *p;
n =strlen(str);
if( (n==0) || (strlen(key)==0) ) {
return NULL;
}
for(i=0,p=&str[n-1],ln=strlen(key); i<n; i++,p--) {
if(strncmp(p,key,ln)==0) {
return p;
}
}
return NULL;
}
/*------------------------------------------------*/
|