谁帮我看下,错在哪里?

wfw115 2010-05-20 02:20:32
全盘搜索的时候总是跳回到菜单,小弟比较菜,弄很久不知道问题出在哪里,谁帮我调试下,谢谢了!
大概是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;
}
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
时间一粒 2010-05-20
  • 打赏
  • 举报
回复
长 ——!! 是实现什么功能的?
ctwoz 2010-05-20
  • 打赏
  • 举报
回复
学习…
wfw115 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shen_wei 的回复:]
里面没有的盘符你也查找。。。这个就有错误了

还有你的搜索不是全盘。。只是对具体的目录
输入 1.txt
C:\\1.txt
D:\\1.txt
E:\\1.txt 等等
[/Quote]

第一个函数是具体目录的搜索,后面的两个是全盘的。
shen_wei 2010-05-20
  • 打赏
  • 举报
回复
里面没有的盘符你也查找。。。这个就有错误了

还有你的搜索不是全盘。。只是对具体的目录
输入 1.txt
C:\\1.txt
D:\\1.txt
E:\\1.txt 等等
向立天 2010-05-20
  • 打赏
  • 举报
回复
单步跟踪发现是你findfiles的问题
你自己好好检查一下吧

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧