c语言修改文件函数 c语言修改文件名称
C语言最文件操作函数(2)
14.freopen(打开文件)
成都创新互联专注于陵水黎族网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供陵水黎族营销型网站建设,陵水黎族网站制作、陵水黎族网页设计、陵水黎族网站官网定制、小程序设计服务,打造陵水黎族网络公司原创品牌,更为您提供陵水黎族网站排名全网营销落地服务。
相关函数 fopen,fclose
表头文件 #includestdio.h
定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);
函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。
返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
范例
复制代码代码如下:
#includestdio.h
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”);
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}
15.fseek(移动文件流的读写位置)
相关函数 rewind,ftell,fgetpos,fsetpos,lseek
表头文件 #includestdio.h
定义函数 int fseek(FILE * stream,long offset,int whence);
函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。
参数 whence为下列其中一种:
SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。
下列是较特别的使用方式:
1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);
返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。
附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。
范例
复制代码代码如下:
#includestdio.h
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}
执行 offset = 5
offset =0
offset=10
16.ftell(取得文件流的读取位置)
相关函数 fseek,rewind,fgetpos,fsetpos
表头文件 #includestdio.h
定义函数 long ftell(FILE * stream);
函数说明 ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。
返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。
错误代码 EBADF 参数stream无效或可移动读写位置的文件流。
范例 参考fseek()。
17.fwrite(将数据写至文件流)
相关函数 fopen,fread,fseek,fscanf
表头文件 #includestdio.h
定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。
返回值 返回实际写入的nmemb数目。
范例
复制代码代码如下:
#includestdio.h
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
执行 参考fread()。
18.getc(由文件中读取一个字符)
相关函数 read,fopen,fread,fgetc
表头文件 #includestdio.h
定义函数 int getc(FILE * stream);
函数说明 getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。
返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
范例 参考fgetc()。
19.getchar(由标准输入设备内读进一字符)
相关函数 fopen,fread,fscanf,getc
表头文件 #includestdio.h
定义函数 int getchar(void);
函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。
返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。
附加说明 getchar()非真正函数,而是getc(stdin)宏定义。
范例
复制代码代码如下:
#includestdio.h
main()
{
FILE * fp;
int c,i;
for(i=0li5;i++)
{
c=getchar();
putchar(c);
}
}
执行 1234 /*输入*/
1234 /*输出*/
20.gets(由标准输入设备内读进一字符串)
相关函数 fopen,fread,fscanf,fgets
表头文件 #includestdio.h
定义函数 char * gets(char *s);
函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束。
返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。
附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用fgets()取代。
范例 参考fgets()
21.mktemp(产生唯一的临时文件名)
相关函数 tmpfile
表头文件 #includestdlib.h
定义函数 char * mktemp(char * template);
函数说明 mktemp()用来产生唯一的临时文件名。参数template所指的文件名称字符串中最后六个字符必须是XXXXXX。产生后的文件名会借字符串指针返回。
返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
附加说明 参数template所指的文件名称字符串必须声明为数组,如:
char template[ ]=”template-XXXXXX”;
不可用char * template=”template-XXXXXX”;
范例
复制代码代码如下:
#includestdlib.h
main()
{
char template[ ]=”template-XXXXXX”;
mktemp(template);
printf(“template=%s/n”,template);
}
22.putc(将一指定字符写入文件中)
相关函数 fopen,fwrite,fscanf,fputc
表头文件 #includestdio.h
定义函数 int putc(int c,FILE * stream);
函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。
返回值 putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。
范例 参考fputc()。
23.putchar(将指定的字符写到标准输出设备)
相关函数 fopen,fwrite,fscanf,fputc
表头文件 #includestdio.h
定义函数 int putchar (int c);
函数说明 putchar()用来将参数c字符写到标准输出设备。
返回值 putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。
附加说明 putchar()非真正函数,而是putc(c,stdout)宏定义。
范例 参考getchar()。
24.rewind(重设文件流的读写位置为文件开头)
相关函数 fseek,ftell,fgetpos,fsetpos
表头文件 #includestdio.h
定义函数 void rewind(FILE * stream);
函数说明 rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。
返回值
范例 参考fseek()
25.setbuf(设置文件流的缓冲区)
相关函数 setbuffer,setlinebuf,setvbuf
表头文件 #includestdio.h
定义函数 void setbuf(FILE * stream,char * buf);
函数说明 在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址。如果参数buf为NULL指针,则为无缓冲IO。Setbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
返回值
26.setbuffer(设置文件流的缓冲区)
相关函数 setlinebuf,setbuf,setvbuf
表头文件 #includestdio.h
定义函数 void setbuffer(FILE * stream,char * buf,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setbuffer()可用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小。
返回值
27.setlinebuf(设置文件流为线性缓冲区)
相关函数 setbuffer,setbuf,setvbuf
表头文件 #includestdio.h
定义函数 void setlinebuf(FILE * stream);
函数说明 setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。
返回值
28.setvbuf(设置文件流的缓冲区)
相关函数 setbuffer,setlinebuf,setbuf
表头文件 #includestdio.h
定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,参数mode有下列几种
_IONBF 无缓冲IO
_IOLBF 以换行为依据的无缓冲IO
_IOFBF 完全无缓冲IO。如果参数buf为NULL指针,则为无缓冲IO。
返回值
29.ungetc(将指定字符写回文件流中)
相关函数 fputc,getchar,getc
表头文件 #includestdio.h
定义函数 int ungetc(int c,FILE * stream);
函数说明 ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。
返回值 成功则返回c 字符,若有错误则返回EOF。
复制代码代码如下:
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp = NULL;
char* str;
char re;
int num = 10;
str = (char*)malloc(100);
//snprintf(str, 10,"test: %s", "0123456789012345678");
// printf("str=%s\n", str);
fp = fopen("/local/test.c","a+");
if (fp==NULL){
printf("Fail to open file\n");
}
// fseek(fp,-1,SEEK_END);
num = ftell(fp);
printf("test file long:%d\n",num);
fscanf(fp,"%s",str);
printf("str = %s\n",str);
printf("test a: %s\n",str);
while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
printf("%c",re);
}
//fread(str,10,10,fp);
fgets(str,100,fp);
printf("test a: %s\n",str);
sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
printf("str2=%s\n", str);
// fprintf(fp,"%s\n",str);
fwrite(str,2,10,fp);
num = ftell(fp);
if(str!=NULL){
free(str);
}
fclose(fp);
return 0;
}
C语言怎么修改文件信息?
#includestdio.h
#includestdlib.h//文件操作函数头文件
struct st{//定义一个结构体
char a[11];//301
char b[11];//01
char c[29];//xiaoming
char d[9];//m1
};
int main()
{
FILE *fp;//文件指针
fp=fopen("D:\\123.txt","r+");//用fopen函数打开D盘下,名为123.txt的文件;
struct st s={"301","01","xiaoming","m"};//各成员的初值;
scanf("%s%s",s.c,s.d);//输入之后会把原有的信息覆盖掉;
fprintf(fp,"%s %s %s",s.a,s.b,s.c,s.d);//用fprintf函数将固定格式的数据写入文件;
printf("%s %s %s %s",s.a,s.b,s.c,s.d);
fclose(fp);
return 0;
/*这样就可以修改文件内容了,之前没仔细看,没看到是文件操作*/
}
C语言中的改变文件大小的函数
C语言虽然没有这类的函数,但是您完全可以使用File类文件操作来重新打开一个文件进行写入,该文件被彻底清空了。微软MSDN上有此类例子: FILE * fopen (const char * filename, const char * mode);
Mode:"w "
Create an empty file for writing. If a file with the same name already exists its content is erased.
c语言 谁给我写个修改文件信息的函数代码
文件是二进制的 还是字符串的 ?
在吗 说话 你还想不想解决问题了?
你要是二进制的我直接就可以处理了
你现在是字符串的 我就需要知道你存入的格式
进行解析 快给我你的文件内容格式
C语言中什么函数可以修改文件内容(可以随意删除原内容的一部分)?
C语言文件操作详解
C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:
文件的打开操作 fopen 打开一个文件
文件的关闭操作 fclose 关闭一个文件
文件的读写操作 fgetc 从文件中读取一个字符
fputc 写一个字符到文件中去
fgets 从文件中读取一个字符串
fputs 写一个字符串到文件中去
fprintf 往文件中写格式化数据
fscanf 格式化读取文件中数据
fread 以二进制形式读取文件中的数据
fwrite 以二进制形式写数据到文件中去
getw 以二进制形式读取一个整数
putw 以二进制形式存贮一个整数
文件状态检查函数 feof 文件结束
ferror 文件读/写出错
clearerr 清除文件错误标志
ftell 了解文件指针的当前位置
文件定位函数 rewind 反绕
fseek 随机定位
# 文件的打开
1.函数原型
FILE *fopen(char *pname,char *mode)
2.功能说明
按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理:
(1) 此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件;
(2) 此时如mode 规定按读方式打开文件,就会产生一个错误。
打开文件的作用是:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;
FILE *:指出fopen是一个返回文件类型的指针函数;
3.参数说明
pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1
4.返回值
正常返回:被打开文件的文件指针。
异常返回:NULL,表示打开操作不成功。
例如:
//定义一个名叫fp文件指针
FILE *fp;
//判断按读方式打开一个名叫test的文件是否失败
if((fp=fopen("test","r")) == NULL)//打开操作不成功
{
printf("The file can not be opened.\n");
exit(1);//结束程序的执行
}
要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。
* 文件的关闭
1. 函数原型
int fclose(FILE *fp);
2. 功能说明
关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由fp-fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。
3. 参数说明
fp:一个已打开文件的文件指针。
4. 返回值
正常返回:0。
异常返回:EOF,表示文件在关闭时发生错误。
例如:
int n=fclose(fp);
*文件的读写操作
A. 从文件中读取一个字符
1. 函数原型
int fgetc(FILE *fp);
2. 功能说明
从fp所指文件中读取一个字符。
3. 参数说明
fp:这是个文件指针,它指出要从中读取字符的文件。
4. 返回值
正常返回: 返回读取字符的代码。
非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。
5. 实例
【例】显示指定文件的内容。
//程序名为:display.c
//执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。
//File display program.
#include stdio.h
void main(int argc,char *argv[]) //命令行参数
{
int ch;//定义文件类型指针
FILE *fp;//判断命令行是否正确
if(argc!=2)
{
printf("Error format,Usage: display filename1\n");
return; //键入了错误的命令行,结束程序的执行
}
//按读方式打开由argv[1]指出的文件
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);//打开操作不成功
return;//结束程序的执行
}
//成功打开了argv[1]所指文件
ch=fgetc(fp); //从fp所指文件的当前指针位置读取一个字符
while(ch!=EOF) //判断刚读取的字符是否是文件结束符
{
putchar(ch); //若不是结束符,将它输出到屏幕上显示
ch=fgetc(fp); //继续从fp所指文件中读取下一个字符
} //完成将fp所指文件的内容输出到屏幕上显示
fclose(fp); //关闭fp所指文件
}
B. 写一个字符到文件中去
1. 函数原型
int fputc(int ch,FILE *fp)
2. 功能说明
把ch中的字符写入由fp指出的文件中去。
3. 参数说明
ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。
fp:这是个文件指针,指出要在其中写入字符的文件。
4. 返回值
正常返回: 要写入字符的代码。
非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。
5. 实例
【例】将一个文件的内容复制到另一个文件中去。
//程序名为:copyfile.c
//执行时可用:copyfile filename1 filename2形式的命令行运行,将文件filename1中的内容复制到文件filename2中去。
//file copy program.
#include stdio.h
void main(int argc,char *argv[]) //命令行参数
{
int ch;
FILE *in,*out; //定义in和out两个文件类型指针
if(argc!=3) //判断命令行是否正确
{
printf("Error in format,Usage: copyfile filename1 filename2\n");
return; //命令行错,结束程序的执行
}
//按读方式打开由argv[1]指出的文件
if((in=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return; //打开失败,结束程序的执行
}
//成功打开了argv[1]所指文件,再
//按写方式打开由argv[2]指出的文件
if((out=fopen(argv[2],"w"))==NULL)
{
printf("The file %s can not be opened.\n",argv[2]);
return; //打开失败,结束程序的执行
}
//成功打开了argv[2]所指文件
ch=fgetc(in); //从in所指文件的当前指针位置读取一个字符
while(ch!=EOF) //判断刚读取的字符是否是文件结束符
{
fputc(ch,out); //若不是结束符,将它写入out所指文件
ch=fgetc(in); //继续从in所指文件中读取下一个字符
} //完成将in所指文件的内容写入(复制)到out所指文件中
fclose(in); //关闭in所指文件
fclose(out); //关闭out所指文件
}
【例】按十进制和字符显示文件代码,若遇不可示字符就用井号"#"字符代替之。
//程序名为:dumpf.c
//执行时可用:dumpf filename1 形式的命令行运行。
// File dump program.
#include stdio.h
void main(int argc,char *argv[])
{
char str[9];
int ch,count,i;
FILE *fp;
if(argc!=2)
{
printf("Error format,Usage: dumpf filename\n");
return;
}
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
count=0;
do{
i=0;
//按八进制输出第一列,作为一行八个字节的首地址
printf("%06o: ",count*8);
do{
// 从打开的文件中读取一个字符
ch=fgetc(fp);
// 按十进制方式输出这个字符的ASCII码
printf("%4d",ch);
// 如果是不可示字符就用"#"字符代替
if(ch' '||ch'~') str[i]='#';
// 如果是可示字符,就将它存入数组str以便形成字符串
else str[i]=ch;
// 保证每一行输出八个字符
if(++i==8) break;
}while(ch!=EOF); // 遇到文件尾标志,结束读文件操作
str[i]='\0'; // 在数组str加字符串结束标志
for(;i8;i++) printf(" "); // 一行不足八个字符用空格填充
printf(" %s\n",str); // 输出字符串
count++; // 准备输出下一行
}while(ch!=EOF); // 直到文件结束
fclose(fp); // 关闭fp所指文件
}
C. 从文件中读取一个字符串
1. 函数原型
char *fgets(char *str,int n,FILE *fp)
2. 功能说明
从由fp指出的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。
3. 参数说明
str:接收字符串的内存地址,可以是数组名,也可以是指针。
n: 指出要读取字符的个数。
fp:这是个文件指针,指出要从中读取字符的文件。
4. 返回值
正常返回:返回字符串的内存首地址,即str的值。
非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要从"写打开"文件中读取字符串,将
发生错误而返回一个NULL值。
D. 写一个字符串到文件中去
1. 函数原型
int fputs(char *str,FILE *fp)
2. 功能说明
把由str指出的字符串写入到fp所指的文件中去。
3. 参数说明
str:指出要写到文件中去的字符串。
fp:这是个文件指针,指出字符串要写入其中的文件。
4. 返回值
正常返回: 写入文件的字符个数,即字符串的长度。
非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要往一个"读打开" 文件中写字符串时,
会发生错误而返回一个NULL值。
5.实例
【例】以下程序将一个文件的内容附加到另一个文件中去。
//程序名:linkfile.c
//执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。
// file linked program.
#include stdio.h
#define SIZE 512
void main(int argc,char *argv[])
{
char buffer[SIZE];
FILE *fp1,*fp2;
if(argc!=3)
{
printf("Usage: linkfile filename1 filename2\n");
return;
}
// 按追加方式打开argv[1] 所指文件
if((fp1=fopen(argv[1],"a"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
if((fp2=fopen(argv[2],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[2]);
return;
}
// 读入一行立即写出,直到文件结束
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
while(fgets(buffer,SIZE,fp2)!=NULL)
fputs(buffer,fp1);
fclose(fp1);
fclose(fp2);
if((fp1=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
fclose(fp1);
}
网页标题:c语言修改文件函数 c语言修改文件名称
转载注明:http://cdiso.cn/article/docsded.html