从文件编码方式来看,文件可分为ASCII码文件(文本文件)和二进制文件。
文本文件每个字符对应一个字节,存放对应的ASCII码。
在windows,以文本文件模式输入'\n'到文件中会保存为'\n' '\r',二进制文件输入'\n'就会保存为'\n'
在unix下,文本文件和二进制文件无区别
fopen函数:FILE *fopen(const char *filename,const char *mode);
打开方式有:r w a b(二进制文件) t(文本文件,可省略不写)
fclose函数:int fclose(FILE *stream);
关闭文件,将缓冲区的数据写入文件中。
关闭成功返回0,发生错误返回EOF。
fgetc函数:int fgetc(FILE *stream);
把读到的字符从unsigned char 转变成int。
返回读到的字符,如果读到文件结尾返回EOF。
fputc函数:int fputc(int c,FILE *stream);
把c转变成unsigned char写入流中。
返回写入的字符。
fgets函数:char *fgets(char *s,int n,FILE *stream);
从stream流中读取字符,读取的字符比n小1,然后把字符放入数组s中。
读取成功返回s。
fputs函数:int fputs(char *s, FILE *stream);
把s指向的串写入stream中。
发生错误返回EOF.否则返回非负值。
feof函数: int feof(FILE *stream);
当stream到达文件结束符时返回非0值
例:利用feof来读文件
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable:4996)
int main() {
FILE *fp;
if ((fp = fopen("d:\\test.txt", "r")) == NULL) return -1;
char ch;
while (!feof(fp)) {
ch = fgetc(fp);
putchar(ch);
}
fclose(fp);
system("pause");
return 0;
}
fread函数:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *strem);
返回成功读取到的元素的数目
如果读取时遇到文件结束符,返回值可能比nmemb小。
fwrite函数:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
stat函数:int stat(const char *filename,struct stat *buf);
例子:文件复制
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#pragma warning (disable:4996)
int main() {
FILE *fp, *fp1;
if ((fp = fopen("e:\\ubuntu-16.04.2-desktop-amd64.iso", "rb")) == NULL) return -1;
if ((fp1 = fopen("d:\\ubuntu-16.04.2-desktop-amd64.iso", "wb")) == NULL) return -1;
struct stat st;
stat("e:\\ubuntu-16.04.2-desktop-amd64.iso", &st);
char *buf = malloc(st.st_size);
fread(buf, sizeof(char), st.st_size, fp);
fwrite(buf, sizeof(char), st.st_size, fp1);
free(buf);
fclose(fp);
fclose(fp1);
system("pause");
return 0;
}
这段代码是有问题的,文件先写入堆中,然后再放入磁盘,太占用内存。
fflush函数:int fflush(FILE *stream);
将缓冲区的数据写入文件
写入成功返回0,写入错误返回EOF
fscanf函数:int fscanf(FILE *stream,const char *format,...);
sscanf函数:int sscanf(char *s,const char *format,...);
fprintf函数:int fprintf(FILE *stream,const char *format,...);
sprintf函数:int sprintf(char *s,const char *format,...);