C语言获得的文件,是使用FILE结构体进行定义的。
scanf是fscanf对stdin的特化,printf是fprintf对stdout的特化,perror是fprintf对stderr的特化。
C语言对文件操作有2种方式:
(1)文本文件(也就是字符文件),可使用函数fprintf,fscanf,fgets,fgetc,fputs,fputc
(2)二进制文件(即其数据是数组、结构体等非字符型复杂数据),可使用函数fread,fwrite
文件操作的模式包括:
(1)“r”读模式
(2)“w”写模式
(3)“a”追加模式
(4)“+”读写都可模式
(5)“b”二进制模式
还有其他函数进行文件操作:
(1)feof
int feof(FILE *stream);
其测试给定流 stream 的文件结束标识符。
stream——这是指向 FILE 对象的指针,该 FILE 对象标识了流。
当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。
while(1)
{
c = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("%c", c);
}
(2)fseek
int fseek(FILE *stream, long int offset, int whence);
设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。
stream——这是指向 FILE 对象的指针,该 FILE 对象标识了流。
offset——这是相对 whence 的偏移量,以字节为单位。
whence——这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:SEEK_SET,文件的开头;SEEK_CUR,文件指针的当前位置;SEEK_END,文件的末尾。
如果成功,则该函数返回零,否则返回非零值。
FILE *fp;
fp = fopen("file.txt","w+");
fputs("This is runoob.com", fp);
fseek( fp, 7, SEEK_SET );
fputs(" C Programming Langauge", fp);
fclose(fp);
// 最终输出 This is C Programming Langauge
(3)ftell
long int ftell(FILE *stream);
返回给定流 stream 的当前文件位置。
stream——这是指向 FILE 对象的指针,该 FILE 对象标识了流。
该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。
len = ftell(fp);
printf("file.txt 的总大小 = %d 字节\n", len);
(4)rewind
void rewind(FILE *stream);
设置文件位置为给定流 stream 的文件的开头。
stream——这是指向 FILE 对象的指针,该 FILE 对象标识了流。
fp = fopen( "file.txt" , "r" );
// 进行文件操作
rewind(fp);
printf("\n");
while(1)
{
ch = fgetc(fp);
if( feof(fp) )
{
break ;
}
printf("%c", ch);
}
fclose(fp);
(5)remove
int remove(const char *filename);
删除给定的文件名 filename,以便它不再被访问。
filename——这是 C 字符串,包含了要被删除的文件名称。
如果成功,则返回零。如果错误,则返回 -1,并设置 errno。
int ret;
FILE *fp;
char filename[] = "file.txt";
fp = fopen(filename, "w");
fprintf(fp, "%s", "这里是 runoob.com");
fclose(fp);
ret = remove(filename);
if(ret == 0)
{
printf("文件删除成功");
}
else
{
printf("错误:不能删除该文件");
}
(6)rename
int rename(const char *old_filename, const char *new_filename);
把 old_filename 所指向的文件名改为 new_filename。
old_filename——这是 C 字符串,包含了要被重命名/移动的文件名称。
new_filename——这是 C 字符串,包含了文件的新名称。
如果成功,则返回零。如果错误,则返回 -1,并设置 errno。
int ret;
char oldname[] = "file.txt";
char newname[] = "newfile.txt";
ret = rename(oldname, newname);
if(ret == 0)
{
printf("文件重命名成功");
}
else
{
printf("错误:不能重命名该文件");
}