vc遍历磁盘查找文件|VC60编译环境下遍历文件夹的源代码

⑴ C/C++编程遍历文件夹,统计当前文件个数,输出文件名

标准C是没有目录相关的函数的CFree是16位的吧,那就更不用想了.貌似只能内嵌汇编使用dos中断来完成.还是换编译器吧devcpp codeblock vc8 之类的都很好【cmail】:这个要用到windows APIHANDLE FindFirstFile( LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);WIN32_FIND_DATA【CHROX】:在Win32平台下不用windows api,有好多功能实现起来都很费劲,特别是系统相关的再说用api又不是什么丢人的事。开发可移植程序除外。用FindFirstFile和FindNextFile两个api很容易实现////////////////////////////////////////////////void FindFile(LPCTSTR lpszPath) { TCHAR szFind[MAX_PATH]; lstrcpy(szFind,lpszPath); if(!IsRoot(szFind)) lstrcat(szFind,"\\"); lstrcat(szFind,"*.*"); WIN32_FIND_DATA wfd; HANDLE hFind=FindFirstFile(szFind,&wfd); if(hFind==INVALID_HANDLE_VALUE) return; do{ if(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0) continue; char szFile[MAX_PATH]; lstrcpy(szFile,lpszPath); if(!IsRoot(szFile)) lstrcat(szFile,"\\"); lstrcat(szFile,wfd.cFileName); if((GetFileAttributes(szFile)&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY){ FindFile(szFile); //递归 }else { } //Do your things } } while (FindNextFile(hFind,&wfd)); CloseHandle(hFind); }【Geomatic】:原来FindFirstFile和FindNextFile是WINDOWS的API 我晕 我以为是C++的函数库里的东西呢我明白了 我找到的代码和CHROX的差不多#include <stdio.h>#include <windows.h>BOOL IsRoot(LPCTSTR lpszPath){TCHAR szRoot[4];wsprintf(szRoot, "%c:\\", lpszPath[0]);return (lstrcmp(szRoot, lpszPath) == 0);}void FindInAll(::LPCTSTR lpszPath){TCHAR szFind[MAX_PATH];<br>lstrcpy(szFind, lpszPath);<br>if (!IsRoot(szFind))<br>lstrcat(szFind, "\\");<br>lstrcat(szFind, "*.*"); // 找所有文件<br>WIN32_FIND_DATA wfd;<br>HANDLE hFind = FindFirstFile(szFind, &wfd);<br>if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败<br>return;<br><br>do<br>{<br>if (wfd.cFileName[0] == '.')<br>continue; // 过滤这两个目录<br>if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)<br>{<br>TCHAR szFile[MAX_PATH];<br>if (IsRoot(lpszPath))<br>wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);<br>else<br>wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);<br>FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归<br>}else{TCHAR szFile[MAX_PATH];if (IsRoot(lpszPath))wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);elsewsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);printf("%s\n",szFile);// 对文件进行操作}} while (FindNextFile(hFind, &wfd));FindClose(hFind); // 关闭查找句柄}int main(int argc, char* argv[]){FindInAll("g://music");return 0;}谢谢大家的帮助【Geomatic】:这个怎么给你们给分啊 那个分有用吗 刚申请的 好多功能不会用啊【cmail】:点上面的“管理”。【CHROX】:分可是个好东西。呵呵,你以后就明白了。【jixingzhong】:DEV C++, 利用链表实现目录内所有文件列表显示#include <stdio.h>#include <dirent.h>/*#include <alloc.h>*/#include <string.h>void main(int argc,char *argv[]){ DIR *directory_pointer; struct dirent *entry; struct FileList { char filename[64]; struct FileList *next; }start,*node; if (argc!=2) { printf("Must specify a directory\n"); exit(1); } if ((directory_pointer=opendir(argv[1]))==NULL) printf("Error opening %s\n",argv[1]); else { start.next=NULL; node=&start; while ((entry=readdir(directory_pointer))!=NULL) { node->next=(struct FileList *)malloc(sizeof(struct FileList)); node=node->next; strcpy(node->filename,entry->d_name); node->next=NULL; } closedir(directory_pointer); node=start.next; while(node) { printf("%s\n",node->filename); node=node->next; } }}【jixingzhong】:linux下面的,作者不是我A Demo written by camelrain /*the program find a file from current directory or your defined directorycommond optinon [path] filename*/#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <pwd.h>#include <unistd.h>#include <stdio.h>#include <string.h>#define LENGTH 256/* just if is a directory*/static int IsDir (char * name);/* search target file, arg1 is current path, arg2 is target file*/static void search_file (char * path, char * name);static int search_flag=0;/*just if is a directory*/static int IsDir (char * name) { struct stat buff; if (lstat(name,&buff)<0) return 0; //if not exist name ,ignore /*if is directory return 1 ,else return 0*/ return S_ISDIR(buff.st_mode);}/*search target file*/static void search_file (char * path, char * name) { DIR *directory; struct dirent * dir_entry; char buffer[LENGTH]; if ((directory=opendir(path)) == NULL) { fprintf(stderr, "%s", path); perror(" "); return; }while (dir_entry=readdir(directory)) { if (!strcmp(dir_entry->d_name,".")||!strcmp(dir_entry->d_name,"..")) { /* do nothing*/ } else { /* if is boot directory add "/" */ if ((strcmp(path,"/"))==0) sprintf(buffer,"%s%s",path,dir_entry->d_name); /* if is not boot directory do not add "/"*/ else sprintf(buffer,"%s/%s",path,dir_entry->d_name); //printf("Now file : %s\n",buffer); if (IsDir(buffer)) search_file (buffer , name); else { if (strcmp(dir_entry->d_name,name)==0) { printf("%s\n",buffer); search_flag=1; } } } } closedir(directory);}int main(int argc, char *argv[]){ static char * current_dir; static char * filename; int length; if (argc==1) { printf("A few parameters!!\n"); return 0; } if (argc==2) { current_dir=(char * )getcwd(current_dir,LENGTH); filename=argv[1]; } if (argc==3) { length=strlen(argv[1]); if (length>1 && (argv[1][length-1]=='/')) { argv[1][length-1]='\0'; //printf("%d\n",strlen(argv[1])); } current_dir=argv[1]; filename=argv[2]; } search_file(current_dir,filename); if (!search_flag) printf("Not found this(%s) file!\n",filename); return 0;}【jixingzhong】:VC 下的:long handle; struct _finddata_t filestruct; char path_search[_MAX_PATH]; handle = _findfirst("目录",&filestruct); if((handle == -1)) return; if( ::GetFileAttributes(filestruct.name)& FILE_ATTRIBUTE_DIRECTORY ) { if( filestruct.name[0] != '.' ) { _chdir(filestruct.name); Search_Directory(szFilename); _chdir(".."); } } else{ if( !stricmp(filestruct.name, szFilename) ) { strcat(path_search,"\\"); strcat(path_search,filestruct.name); MessageBox(path_search);} } while(!(_findnext(handle,&filestruct))) { if( ::GetFileAttributes(filestruct.name) &FILE_ATTRIBUTE_DIRECTORY ) { if(*filestruct.name != '.') { _chdir(filestruct.name); Search_Directory(szFilename); _chdir(".."); } else { if(!stricmp(filestruct.name,szFilename)) { _getcwd(path_search,_MAX_PATH); strcat(path_search,"\\"); strcat(path_search,filestruct.name); MessageBox(path_search); } } } _findclose(handle); }

⑵ 在windows下 怎么用c语言遍历文件夹要用纯c的

什么叫纯C?用C语言遍历文件肯定需要用到函数,标准C下貌似没有这个函数内,但容是使用VC的函数库可能可以实现,如果实在不行可以用第三方函数库,,,还不行的话用system("command");引用dos命令可以遍历,

⑶ 如何遍历目录,找出磁盘所有目录的dll文件

这是 a.bat 批命令程序,遍历目录,找出磁盘所有目录的dll文件,存放结果到 temp.txt 文件里。内temp.txt 文件可供C程序进一步处容理用,一行一个文件名,含全路径名。C 程序 用system("a.bat"); 调用即可。若从某盘根目录进入寻找,添:cd C:\\D:cd D:\\这类命令即可。@echo off setlocal enabledelayedexpansion for /f %%i in ('dir /b /s "*.dll"') do ( echo %%iset str=%%i set str=!str:\=\\! echo !str! >> temp.txt) @echo on

⑷ vc如何遍历全盘(包括子目录)

int count_file(char *dir){ _finddata_t p;//定义一个结构体存放文件属性int n,n1;char *a;n=strlen(dir);a=new char [n+100];n1=0;strcpy(a,dir);strcat(a,"\\*.*");if((n=_findfirst(a,&p))!=-1L)//调用文件查找函数{if(strcmp(p.name,".")&&strcmp(p.name,"..")){if((p.attrib&_A_SUBDIR))//文件是否为文件夹{int n2=strlen(dir)+strlen(p.name);char *b=new char [n2+10];strcpy(b,dir);strcat(b,"\\");strcat(b,p.name);n1+=count_file(b);//递归调用 作用是返回文件夹内的文件总数n1++;delete(b);}}while(_findnext(n,&p)==0)//寻找下一个文件{if(strcmp(p.name,".")&&strcmp(p.name,"..")){if((p.attrib&_A_SUBDIR)){int n2=strlen(dir)+strlen(p.name);char *b=new char [n2+10];strcpy(b,dir);strcat(b,"\\");strcat(b,p.name);n1+=count_file(b);delete(b);n1++;}else n1++;}}_findclose(n);//结束寻找}delete(a);return n1;//返回文件总个数}

⑸ VC6.0编译环境下遍历文件夹的源代码

#include "stdafx.h"#include <windows.h> BOOL IsRoot(LPCTSTR lpszPath){ TCHAR szRoot[4]; wsprintf(szRoot, "%c:\\", lpszPath[0]); return (lstrcmp(szRoot, lpszPath) == 0);}void FindInAll(::LPCTSTR lpszPath){TCHAR szFind[MAX_PATH];lstrcpy(szFind, lpszPath); if (!IsRoot(szFind)) lstrcat(szFind, "\\"); lstrcat(szFind, "*.*"); // 找所有文件WIN32_FIND_DATA wfd;HANDLE hFind = FindFirstFile(szFind, &wfd);if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败 return; do { if (wfd.cFileName[0] == '.') continue; // 过滤这两个目录 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { TCHAR szFile[MAX_PATH]; if (IsRoot(lpszPath)) wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); else wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归 } else { TCHAR szFile[MAX_PATH]; if (IsRoot(lpszPath)) wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); else wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); printf("%s\n",szFile); // 对文件进行操作 } } while (FindNextFile(hFind, &wfd)); FindClose(hFind); // 关闭查找句柄}int main(int argc, char* argv[]){ FindInAll("e:\\result"); return 0;}//结合网上资料写出的,作者–杨克群^_^


赞 (0)