//<stdio.h> 中FILE结构体定义。
typedef struct _iobuf
{
char *_ptr; //当前缓冲区内容文件。
int _cnt; //缓冲区还有多少个字符。
char *_base; //缓冲区的起始地址。
int flag; //文件流的状态,是否错误或者结束。
int _file; //文件描述符。
int _charbuf; //双字节缓冲,缓冲2个字符。
int _bufsize; //缓冲区大小。
char *_tmpfname; //临时文件名。
} FILE;
FILE *fopen(char *filename, char *type); (+可读可写。a只写不读。)
type对于文本文件有r,w,r+,w+,a,a+.
type对于二进制文件有rb,wb,rb+,wb+,ab,ab+.
int fclose(FILE *stream);
int fflush(FILE *stream); //将内存中文件缓冲区的数据强制更改到磁盘。
int fputs(char *string, FILE *stream); //向文件中写入字符串。
char *fgets(char *string, int n, FILE *stream); //从流中读取字符串。
int fprintf(FILE *stream, char *format[,argument,….]); //将格式化字符串输出到一个流中。
int fscanf(FILE *stream, char *format[,argument,…]); //从一个流中执行格式化字符串。
int feof(FILE *stream); //检测流上的文件结束符。
int access(const char *filename, int amode); 确定文件或文件夹的访问权限。
amode参数:
(1)Linux–> unistd.h
R_OK 读权限。
W_OK 写权限。
X_OK 读写权限。
F_OK 文件是否存在。
(2)Windows–> io.h
文件夹 Windows下都可读写。一般用于判断Windows下文件夹是否存在。
0 文件是否存在。
2 是否可写。
4 是否可读。
6 是否可读写。
是返回0,否返回-1;
按照内存块读取数据。(数组,结构体).返回值为成功操作的数量。
int fread(void *ptr, int size, int nitems, FILE *stream); 从一个流中读取数据。读入的的数据存放地址,一个元素有多大,多少个元素,从哪儿读。
int fwrite(void *ptr, int size, int nitems, FILE *stream); 写入数据到流中。源数据开始地址,一个元素有多大,多少个元素,向哪儿写.
fread()与fwrite()都返回实际成功的个数。
//复制文件
char temp[1024] = {‘\0’};
while(fgets(temp,1024,in) != NULL)
{
fputs(temp,out);
}
int sprintf(char *string, char *format, [,argument,…]); // 将字符串打印入数组。
int sscanf(char *string, char *format[,argument,…]); //从数组中读取格式化数据。
void perror(char *string); //系统错误信息。
int ferror(FILE *stream); //文件出错为0,否则为非0.
void clearerr(FILE *stream); // 重置文件流的状态,清除错误信号。恢复正常。
void fseek(FILE *stream, long offset, int fromwhere); //重定位流上的文件指针
文件指针,偏移量,起始点。
起始点:
文件开始 0 SEEK_SET
文件末尾 2 SEEK_END
当前位置 1 SEEK_CUR
偏移量 (-/+)offset可正可负。
void rewind(FILE *stream); //将文件指针重新指向一个流的开头
long ftell(FILE *stram); //成功返回当前文件指针距文件头多少个字节。否则,返回-1.
int remove(char *filename); //删除一个文件成功返回0,失败会返回-1.
char *mktemp(char *template); //建立唯一的文件
void setbuf(FILE *steam, char *buf); // 把缓冲区与流相联
int setvbuf(FILE *stream, char *buf, int type, unsigned size); //把缓冲区与流相关
int rename(char *oldname, char *newname); //重命名文件或文件夹。不在同一个路径下是剪切操作。