文件操作

从文件编码方式来看,文件可分为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,...);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值