本文用来说明c 调用 win32 IO函数,获取当前路径,获取当前模块所在的目录,以及递归输出某个目录的文件与文件夹方法。
代码如下:
/************************************************************ FileName: direcory operate Version : Date:2013.01.30 Description: //本模块用来说明win32 目录操作函数的用法 <author> hbb0b0@163.com </author> ***********************************************************/ #include "stdafx.h" #include "stdio.h" #include "windows.h" //递归目录,输出目录名称与文件名 void recursivedirecory(char * path); int _tmain(int argc, _TCHAR* argv[]) { //用于存放当前路径缓冲区 char currentPath[MAX_PATH]; BOOL ifrelative=FALSE; DWORD result=0; const char relativepath[]="..\\"; char relativepath_real[MAX_PATH]; char * ptr1=relativepath_real; char * dir="E:\\Hbb0b0\\"; HMODULE moudule=NULL; memset(currentPath,0,MAX_PATH); memset(relativepath_real,0,MAX_PATH); //获取当前路径 result=GetCurrentDirectoryA(MAX_PATH,currentPath); printf("%s\n",currentPath); //获取当前运行程序的路径 moudule= GetModuleHandleA(NULL); result=GetModuleFileNameA(moudule,currentPath,strlen(currentPath)); //获取相对路径全路径 result=GetFullPathNameA(relativepath,MAX_PATH,relativepath_real,NULL); printf("full path:%s ",relativepath_real); //递归目录 recursivedirecory(dir); return 0; } void recursivedirecory(char * path) { //存放查询函数返回的句柄 HANDLE hand=NULL; //查询函数数据结构 WIN32_FIND_DATAA finddata; char fullpath[MAX_PATH]; char findpath[MAX_PATH]; sprintf( findpath,"%s\\*.*",path); //FindFirstFileA 不仅仅查找文件,也会查找到目录 //FindFirstFileA *.* 表示查找所用文件,文件通配符 //无值就会找不到任何文件 hand=FindFirstFileA(findpath,&finddata); //.当前目录名称 //..上级目录的名称 do{ if(lstrcmpA(finddata.cFileName,".")==0| lstrcmpA(finddata.cFileName ,"..")==0) { continue; } wsprintfA(fullpath,"%s\\%s",path,finddata.cFileName ); if(finddata.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY) { printf("directory:\n"); recursivedirecory(fullpath); } else { printf("file:%s \n",fullpath); } }while(FindNextFileA(hand,&finddata));//是否含有文件 }