永发信息网

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

答案:5  悬赏:20  手机版
解决时间 2021-01-27 05:49
  • 提问者网友:刺鸟
  • 2021-01-26 13:23
在一个文件夹中,有多个文件,他们的命名规则是sub_ ,下划线后面是随即的四位数字,程序读取文件夹中的所有已sub_开头的文件,然后搜索每个文件中的内容,如果里面包含字符a则将,这个该文件名写到result.txt中。
我想问下大家,如何做到程序自动读取有命名规则的文件呢
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-01-26 15:00
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;
}
全部回答
  • 1楼网友:平生事
  • 2021-01-26 18:02
同时打开了多个包含main的文件
  • 2楼网友:不想翻身的咸鱼
  • 2021-01-26 16:36
#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); }
  • 3楼网友:轻雾山林
  • 2021-01-26 16:31
文件名选择: 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; }
  • 4楼网友:罪歌
  • 2021-01-26 15:47
这就用到了数据结构中的“串的模式匹配”,因为文件名被当做字符串处理了,你说了命名规则是sub_ ,程序员在设计时就限定死了,他在内部定义了一个字符串“sub_ “,然后根据串的模式匹配,找到以”sub_ ”开头的文件,然后使用了C语言的内部函数来进行读取。这里串的模式匹配,如果你是软件工程专业的学生的话上完C语言基础课程后就会学,这门课是必学的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯