谁帮我看下,错在哪里?
全盘搜索的时候总是跳回到菜单,小弟比较菜,弄很久不知道问题出在哪里,谁帮我调试下,谢谢了!
大概是findfiles()这个函数出问题。
-------------------------------------------------------------------------------------
#include <stdio.h>
#include <io.h>
#include <time.h>
#include <stdlib.h>
#include <string>
//输入完整路径跟文件名进行查找.
int search(){
struct _finddata_t c_file;
long hFile;
char fname[_MAX_FNAME],temp[1000];
system("cls");
printf("输入您想要查找的文件,如c:\\*.txt (直接回车返回主菜单):");
gets(fname);
if(fname[0]=='\0'){
system("cls");
return 0;
}
if( (hFile = _findfirst( fname, &c_file )) == -1L ) {
system("cls");
printf( "\n提示:文件没有找到。\n\n" );
return 0;
}
else {
printf( "\n提示:正在列出文件.....\n\n" );
printf( "\n只读 隐藏 系统 存档 文件名 创建日期 %20c 大小\n", ' ' );
printf( "---- ---- ---- ---- ------ -------- %20c ----\n", ' ' );
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-14s %.23s %9ld\n",
c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
while( _findnext( hFile, &c_file ) == 0 ) {
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-14s %.23s %9ld\n",
c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
}
_findclose( hFile );
printf("\n提示:搜索完毕! (按回车返回主菜单)\n");
}
gets(temp);
if(temp[0]=='\0'){
system("cls");
}
return 0;
}
//查找函数.
int findfiles(char *path, char *fname){
// char path[_MAX_PATH],fp[_MAX_PATH],fname[_MAX_FNAME];
char fp[_MAX_PATH],nextpath[_MAX_PATH];
struct _finddata_t c_file;
long hFile;
sprintf(fp, "%s\\%s", path, fname);
if ( (hFile = _findfirst( fp, &c_file )) != -1L ) {
// if ( ! (strcmp(c_file.name, "."==0 || strcmp(c_file.name, ".." == 0) )
if (!(c_file.attrib & _A_SUBDIR)) {
if( strcmp(c_file.name, ".") && strcmp(c_file.name, "..") ){
printf( "\n提示:正在列出文件.....\n\n" );
printf( "\n只读 隐藏 系统 存档 文件名 创建日期 %20c 大小\n", ' ' );
printf( "---- ---- ---- ---- ------ -------- %20c ----\n", ' ' );
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-14s %.23s %9ld\n",
c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
}
}
while (_findnext( hFile, &c_file)) {
if (!(c_file.attrib & _A_SUBDIR)) {
if( strcmp(c_file.name, ".") && strcmp(c_file.name, "..") ){
printf( "\n提示:正在列出文件.....\n\n" );
printf( "\n只读 隐藏 系统 存档 文件名 创建日期 %20c 大小\n", ' ' );
printf( "---- ---- ---- ---- ------ -------- %20c ----\n", ' ' );
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-14s %.23s %9ld\n",
c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
}
}
}
_findclose( hFile );
}
sprintf(fp, "%s\\*.*", path);
if ( (hFile = _findfirst( fp, &c_file )) != -1L ) {
if ( (c_file.attrib & _A_SUBDIR) ) {
if ( strcmp(c_file.name, ".") && strcmp(c_file.name, "..") ) {
sprintf(nextpath, "%s\\%s", path, c_file.name);
findfiles(nextpath, fname);
}
}
while ( _findnext( hFile, &c_file) ) {
if ( strcmp(c_file.name, ".") && strcmp(c_file.name, "..") ) continue;
if ( (c_file.attrib & _A_SUBDIR) ) {
sprintf(nextpath, "%s\\%s", path, c_file.name);
findfiles(nextpath, fname);
}
}
_findclose( hFile );
}
return 0;
}
//全盘查找指定文件.
int SearchDisk(){
char path[_MAX_PATH]="A:", fname[1000];
system("cls");
printf("输入您想要查找的文件的文件名,如findfile.txt (直接回车返回主菜单):");
gets(fname);
if(fname[0]=='\0'){
system("cls");
return 0;
}
if( strlen(fname) > _MAX_FNAME ){
printf("\n提示:文件名过长,请重新输入!\n");
}
for( ; path[0] >= 'A' && path[0] <= 'Z'; ) {
findfiles( path, fname );
path[0]+=1;
}
return 0;
}
//在指定目录及其子目录下,查找指定文件.
int SearchPath(){
char path[1000], fname[1000];
system("cls");
printf("输入您想要查找的文件的路径,如c:\\windows (直接回车返回主菜单):");
gets(path);
if(path[0]=='\0'){
system("cls");
return 0;
}
if( strlen(path) > _MAX_PATH ){
printf("\n提示:路径过长,请重新输入!\n");
}
printf("\n\n输入您想要查找的文件的文件名,如findfile.txt (直接回车返回主菜单):");
gets(fname);
if(fname[0]=='\0'){
system("cls");
return 0;
}
if( strlen(fname) > _MAX_FNAME ){
printf("\n提示:文件名过长,请重新输入!\n");
}
findfiles( path, fname );
return 0;
}
//功能菜单。
int choose(int &WhatToDo ){
char i,j,temp[100];
printf("选择你想要进行的操作: \n");
printf(" 1.搜索文件 \n");
printf(" 2.全盘搜索 \n");
printf(" 3.指定路径搜索 \n");
// printf(" 4.修改学生资料 \n");
// printf(" 5.显示学生列表 \n");
// printf(" 6.写入文件 \n");
// printf(" 7.读取文件 \n");
printf(" 8.退出 \n");
printf("请选择: ");
i=getchar();
if(i=='\n') {
WhatToDo=0;
return 0;
}
j=getchar();
if((i>='1' && i<='8') && j=='\n'){
WhatToDo=i-'0';
}
else if(j=='\n') {
WhatToDo=0;
}
else {
gets(temp);
WhatToDo=0;
}
return 0;
}
int main( )
{
// struct _finddata_t c_file;
int WhatToDo;
for(;;){
choose(WhatToDo);
if(WhatToDo==1){
search();
}
else if(WhatToDo==2){
SearchDisk();
}
else if(WhatToDo==3){
SearchPath();
}
else if(WhatToDo==8){
break;
}
else {
system("cls");
printf("\n错误:输入的数字应为1,2,3或8. \n\n");
}
}
return 0;
}