c语言 读取文件夹中,有命名规则的多个文件 50

在一个文件夹中,有多个文件,他们的命名规则是sub_,下划线后面是随即的四位数字,程序读取文件夹中的所有已sub_开头的文件,然后搜索每个文件中的内容,如果里面包含字符a... 在一个文件夹中,有多个文件,他们的命名规则是sub_ ,下划线后面是随即的四位数字,程序读取文件夹中的所有已sub_开头的文件,然后搜索每个文件中的内容,如果里面包含字符a则将,这个该文件名写到result.txt中。
我想问下大家,如何做到程序自动读取有命名规则的文件呢
展开
 我来答
tattackor
推荐于2018-04-12 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:895万
展开全部
  1. 通过命名规则生成文件名字符串,然后循环使用文件操作函数读取即可。

  2. 例程:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef int * PINT;
    PINT matrix[12][12];
    PINT readfile(char * filename)    //自定义读取文件的函数
    {
         PINT e = 0; int i = 0; FILE * f = 0;
         if(!filename) return 0;
         f = fopen(filename, "r");
         if(!f) return 0;
         e = (PINT)malloc(sizeof(int) * 289);
         for(i = 0; i < 289; i++) fscanf(f, "%d", e+i);
         fclose(f);
         return e;
    }
    int main(void)
    {
        char fname[20]=""; int i = 0, j = 0;
        for(i = 0; i < 12; i++) for( j = 0; j < 12; j++) {
            sprintf(fname, "%d-%d.txt", i, j);//过命名规则生成文件名fname
            matrix[i][j]=readfile(fname);//循环读取多个文件里面的信息
        }
        return 0;
    }
匿名用户
2014-01-21
展开全部
这就用到了数据结构中的“串的模式匹配”,因为文件名被当做字符串处理了,你说了命名规则是sub_ ,程序员在设计时就限定死了,他在内部定义了一个字符串“sub_ “,然后根据串的模式匹配,找到以”sub_ ”开头的文件,然后使用了C语言的内部函数来进行读取。这里串的模式匹配,如果你是软件工程专业的学生的话上完C语言基础课程后就会学,这门课是必学的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2014-01-22 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5733万
展开全部
文件名选择:
system("dir sub_* /B > log.txt");
读入 log.txt
查文件名的5,6,7,8字符是不是数字
(你还可加入程序名长度大于8或12的要求)
程序如下:

#include <stdio.h>
main()
{
FILE *fp,*fout;
char str[30][50],c;
int i,n=0;
system("dir sub_* /B > log.txt");
fp=fopen("log.txt","r");
while(1){
if ( fgets(str[n],50,fp)==NULL) break;
if ( str[n][4]>='0' && str[n][4]<='9' &&
str[n][5]>='0' && str[n][5]<='9' &&
str[n][6]>='0' && str[n][6]<='9' &&
str[n][7]>='0' && str[n][7]<='9' ) {
str[n][strlen(str[n])-1]='\0';
n++;
}
}
fclose(fp);
// for (i=0;i<n;i++) printf("%s\n",str[i]);

fout=fopen("result.txt","w");
for (i=0;i<n;i++){
fp=fopen(str[i],"r");
while(1){
c=fgetc(fp);
if (feof(fp)) break;
if (c=='a') {fprintf(fout,"%s\n",str[i]); break;}
}
fclose(fp);
}

fclose(fout);
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishimin1972
2014-01-21 · TA获得超过741个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:454万
展开全部
#include <stdio.h>

//在文件filename中寻找字符ch,找到则返回1,否则返回0
int CharInFile( char *filename, char ch)
{
int c;
FILE *f;
f=fopen(filename,"r");
if (NULL==f) return 0;
while(1)
{
c=fgetc(f);
if (EOF == c) break;
if ((char)c==ch) break;
}
fclose(f);

return (char)c==ch ? 1 : 0;
}

void main()
{
FILE *result; //result.txt
char filename[]="sub_0000";
int i;

result=fopen("result.txt","w");
if (NULL==result)
{
printf("不能打开记录文件result.txt\n");
return;
}

for (i=0; i<=9999; i++)
{
sprintf(filename+4, "%04d", i);
if (CharInFile(filename,'a'))
fprintf(result, "%s\n", filename);
}
fclose(result);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千雨殇月
2014-01-21 · 超过20用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:38.3万
展开全部
历编吧,或者获得程序目录文件列表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式