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

在一个文件夹中,有多个文件,他们的命名规则是sub_ ,下划线后面是随即的四位数字,程序读取文件夹中的所有已sub_开头的文件,然后搜索每个文件中的内容,如果里面包含字符a则将,这个该文件名写到result.txt中。
我想问下大家,如何做到程序自动读取有命名规则的文件呢

    通过命名规则生成文件名字符串,然后循环使用文件操作函数读取即可。

    例程:

    #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个回答  2014-01-21
这就用到了数据结构中的“串的模式匹配”,因为文件名被当做字符串处理了,你说了命名规则是sub_ ,程序员在设计时就限定死了,他在内部定义了一个字符串“sub_ “,然后根据串的模式匹配,找到以”sub_ ”开头的文件,然后使用了C语言的内部函数来进行读取。这里串的模式匹配,如果你是软件工程专业的学生的话上完C语言基础课程后就会学,这门课是必学的。
第2个回答  2014-01-22
文件名选择:
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;
}本回答被网友采纳
第3个回答  2014-01-21
#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);
}
第4个回答  2014-01-21
历编吧,或者获得程序目录文件列表

c语言 读取目录中的文件名,并将其存入数组中
用system 调用 DOS DIR 命令就可以了:system ( "dir sss_* \/B > log.txt");这就把 前缀为sss_的文件 文件名 存入 log.txt 文件了。一个名字一行,没有别的东西。你再 读出来。include <stdio.h> main(){ FILE *fp;char str[30][50]; \/\/ 假定文件数不超过30个 int i,n=0;s...

C语言文件名命名有什么规则么?
1. C语言中的文件命名应遵循标识符的命名规则,同时,头文件通常以".h"作为后缀,源文件则以".c"作为后缀。2. 标识符的命名规则包括:由字母(大写或小写)、数字和下划线组成,且首字符必须为字母或下划线,不能以数字开头。3. 例如,以下为有效的标识符:abc,a1,prog_to。然而,C语言的关键字...

C语言文件名命名有什么规则么?
C语言文件名命名只要符合标识符命名规则即可,另外,头文件以".h"为后缀,源文件以".c"为后缀。C语言标识符命名规则:标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。不能把C语言关键字作为用...

c语言如何打开D:\\Program Files (x86)文件夹
system("start C:\\\\Progra~2"); VS2019验证通过。用这个函数,如果要打开的是上面那个,就用~1,如果是下面那个,用~2,如果还有更多的,就用~3,以此类推。具体原因,是DOS系统的8.3命名规则。就是说DOS系统下不支持长文件名,所以超过8位的,就取前六位字符,后面依次加~1。

文件和文件夹命名要符合什么规则
通过命名规则生成文件名字符串,然后循环使用文件操作函数读取即可。例程:#include #include #include 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...

C语言:命名规范
匈牙利命名:如`m_lpszStr`,通过前缀标识变量类型和作用域,如字符串长指针。帕斯卡命名:如`CalculateTotal()`,首字母大写。下划线命名:如`calculate_total()`,逻辑分隔处用下划线。命名时应遵循清晰、一致的原则,尽量使用英文单词,避免误解。特殊约定或缩写需在文件开头注释。个人命名风格要一致,...

用dos命令对文件有规则的改名,例如一个图纸名称:D-DT-0987 general arra...
可惜只上百文件,不如直接改,花太多功夫不合算,给一个方法:1、DIR把文件名列出 2、复制这些文件名到EXCEL 3、在EXCEL中用文本操作方法生成改名命令,说白了就是一个文件一个命令,有多少个文件就有多少个命令 4、复制这些命令到写字板,保存时扩展名为BAT 5、双击这个BAT文件就可以了 ...

这些是什么文件?
如READ.ME用中文理解就是"读我",即提示用户在使用软件前先看看这个文件的内容,以获取更多的提示信息。而更重要的是,DOS下规定用后缀名来区分各种不同的文件。 在DOS下最容易遇到的首先是可执行文件,后缀名有两类:*.exe、*.com(此处的*表示文件名任意),它们是由汇编语言或其它高级语言编出的程序经过编译后...

如何用c语言进行文件的批量重命名
rename(dirt->d_name, dir_name) < 0){ \/\/dir_name 为新的命名 printf("rename failed\\n");exit(1);} } } return 0;} 原理挺简单 你输入一个文件夹作为参数 然后程序就打开这个文件夹遍历这个文件夹里的文件,把这个文件的名字取出来后面加上 "_计数" 用rename 重新命名就行了....

(C语言问题)如何使用别人提供的.a接口文件
这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so (参考2:都是由C或C++编译出来的)(-shared 该选项指定生成动态连接库(让连接器生成T类型的导出...

相似回答