1. c语言读写文件,文件名长度有限制吗
有限制的,c库函数里有一种结构体_finddata_t 专门存储文件的各种信息,具体定义如下:struct _finddata_t{ unsigned attrib; time_t time_access;time_t time_write;_fsize_t size;char name[MAX_FNAME]; name[MAX_FNAME]就是存储的文件名。 }其中_MAX_FNAME是一个常量宏,在stdlib.h文件中被定义,表示的是文件名的最大长度!!都是原创的哦,不是复制粘贴过来的!!
2. 正则表达式匹配文件名
[\w.]*\.doc其实没看明白你的需求,你匹配的是doc后缀的文件名,是吧?那上面这个可以。不过不知道你的数据格式,所以不对的话也有可能。
3. C语言怎么用正则表达式
借用c的正则表达式库,需要引入头文件<regex.h>。支持POSIX.2正则表达式标准。简单用法如:regex_t reg; //先声明一个正则表达式体。regcomp(®, "[a-zA-Z]*", 0); //从字符串来编译这个表达式。regmatch_t match[2]; //用来保存匹配结果。regexec(®, "abcedfg", 2, match, 0); //匹配字符串。此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。
4. C语言文件名命名有什么规则么
C语言文件名命名只要符合标识符命名规则即可,另外,头文件以".h"为后缀,源文件以".c"为后缀。
C语言标识符命名规则:
标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。
不能把C语言关键字作为用户标识符,例如if ,for, while等.
标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。
标识符命名应做到“见名知意”,例如,长度(外语:length),求和、总计(外语:sum),圆周率(外语:pi)……
5. 用C语言编程修改文件名(C++也行)
麻烦在文件名允许有空白和一些与C语言有冲突的特殊符号。如果没有上述情况可以这样写:(1)通过位置参数传入 老扩展名 和 新扩展名void main(int argc, char *argv[]){}命令行: my_rename.exe jpeg jpg程序名在 argv[0]里,"jpeg" 在 argv[1]里,jpg 在 argv[2]里了l2 = strlen(argv[1]); // 老扩展名长度(2) 通过char command[120],namelist[]="all.lis";sprintf(command,"DIR/B/A-D/OD *.%s > %s", argv[1],namelist);system(command);取得所有要换名的文件名字列表,存放在all.lis文件里,一个文件名一行。(3)打开 all.lis 文件,FILE *flist;if ( (flist = fopen(namelist,"r") ) == NULL ) { printf("\007Cann't open work file: %s ", namelist);exit(1);};一行一行读入:char current_file_name[64],new_name[64];while ( fgets( current_file_name, 64, flist) !=NULL ) { 处理};(4)while 循环 处理:strcpy(new_name,current_file_name);l = strlen(new_name); // 文件名全长strncpy(&new_name[0]+(l-l2),"\0",1); // 文件基本名,含点号,不含扩展名strcat(new_name,argv[2]); // 新文件名sprintf(command,"REN %s %s",current_file_name,new_name); // 换名命令system(command); // 执行换名完整程序:#include <stdio.h>#include <stdlib.h>FILE *flist;void main(int argc,char * argv[]) { int l,l2;char command[240],namelist[]="all.lis"; char current_file_name[64],new_name[64]; if(argc < 3) {printf("\007Usage: %s old_ext new_ext\n",argv[0]);printf("For example: %s jpeg jpg\n",argv[0]);exit(0);}l2 = strlen(argv[1]);sprintf(command,"DIR/B/A-D/OD *.%s > %s", argv[1],namelist); system(command); if ( (flist = fopen(namelist,"r") ) == NULL ) { printf("\007Cann't open work file: %s ", namelist);exit(1); }; while ( fgets( current_file_name, 64, flist) !=NULL ) { strcpy(new_name,current_file_name); l = strlen(new_name); strncpy(&new_name[0]+(l-l2-1),"\0",1); strcat(new_name,argv[2]); strncpy(¤t_file_name[0]+l-1,"\0",1);sprintf(command,"REN %s %s", current_file_name, new_name); system(command); }; fclose(flist);exit(0);}
6. C语言中的fopen()函数打开文件时,文件名有什么限制吗
文件名必须是一个C字符串,它是符合操作系统标准的合法文件,含.和下划线不会错。如:FILE *fin = fopen("data_.dat", "r");FILE *fout = fopen("C:\\temp\\o_data.dat", "w");由于\为转义操作符,故目录要用两个\\
7. 如何在c/c++中用正则表达式
最简单是借用c的正则表达式库,需要引入头文件<regex.h>。支持POSIX.2正则表达式标准。简单用法如:regex_t reg; //先声明一个正则表达式体。regcomp(®, "[a-zA-Z]*", 0); //从字符串来编译这个表达式。regmatch_t match[2]; //用来保存匹配结果。regexec(®, "abcedfg", 2, match, 0); //匹配字符串。以上函数的用法可以参考GNU的文档。http://www.gnu.org/s/libc/manual/html_node/Regular-Expressions.html此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。
8. c语言函数rename()对文件名长度有限制
以前dos时代文件名是有限制的,所谓的8.3格式即文件名最多8个字符,扩展名最多3个字符win95后可以很长了可能是编译器问题。我猜你用的是TC吧?dos下的16位编译器。可能不支持长文件名。我在g++编译器下试了,可以成功。
9. 求正则表达式匹配一个文件名称
|//匹配yyyy-MM-dd(限制年必须为4位数,即必须是1000年之后,9999年之前的日内期)/^[a-zA-z]{3}-[1,2]d{3}-((0?[1-9])|(1[012]))-((0?[1-9])|([12]d)|(3[01]))$///匹配年(范围容0-9999)/^d{1,4}$///匹配月/^(?:(0?[1-9])|(1[012]))$///匹配日/^(?:(0?[1-9])|([12]d)|(3[01]))$/
未经允许不得转载:山九号 » c正则限制某类文件名|求正则表达式匹配一个文件名称