永发信息网

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

答案:5  悬赏:20  手机版
解决时间 2021-01-27 05:49
在一个文件夹中,有多个文件,他们的命名规则是sub_ ,下划线后面是随即的四位数字,程序读取文件夹中的所有已sub_开头的文件,然后搜索每个文件中的内容,如果里面包含字符a则将,这个该文件名写到result.txt中。
我想问下大家,如何做到程序自动读取有命名规则的文件呢
最佳答案
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;
}
全部回答
同时打开了多个包含main的文件
#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); }
文件名选择: 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; }
这就用到了数据结构中的“串的模式匹配”,因为文件名被当做字符串处理了,你说了命名规则是sub_ ,程序员在设计时就限定死了,他在内部定义了一个字符串“sub_ “,然后根据串的模式匹配,找到以”sub_ ”开头的文件,然后使用了C语言的内部函数来进行读取。这里串的模式匹配,如果你是软件工程专业的学生的话上完C语言基础课程后就会学,这门课是必学的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
晨脉高是怎么回事
【次氯酸电子式】为什么次氯酸的电子式要把氧
华硕笔记本电脑键盘左下的两张图标颜色有的是
在qq或微信上不喜欢理人的人属于什么性格??
怎样才能控制爱一个人?
剑齿象的意思是什么啊?知道的请说下!
金城铃木ax100汽油和机油的混合比
梦见浑浊的洪水
今年爸爸38岁,长子10岁,次子7岁,几年后两个儿
如何评价李易峰的面相
勇者大冒险丰绅殷德为什么在和珅的陵墓复活
栉垢爬痒的意思是什么啊?知道的请说下!
国外贷款项目的管理中,下列哪些属于商务部的
三国战纪怎么炼酒葫芦?
我从网上下载一个JAVA赛车游戏的代码,但是里
推荐资讯
下列关于哺乳动物精子形成的叙述不正确的是CA
相对湿度是什么
内眼角开眼角后有凹陷疤痕在眼角处可以修复吗
占我便宜是什么意思
蹑寇的意思是什么啊?知道的请说下!
电脑老是出现log rep oit dlll 丢失是什么意
梦见一座房子快要倒塌,有还没倒,什么意思??
清新干洗店地址在什么地方,我要处理点事
镜之森林九龙口别墅聚会营地地址好找么,我有
下列关于我国理财师队伍扩张迅速的因素的说法
该县级人民政府卫生行政部门在接到医疗机构的
兴盛五金建材综合商店地址有知道的么?有点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?