文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"
char const* filename="D:/hello.txt";
路径名使用的是“/”或者使用 转义字符“\\”;
"fopen",
FILE *fp=fopen(char const *name,char const mode);
e.g:FILE *fp = fopen(filename,"wb");
打开文件流,name为要打开文件的路径,如这里的filename;mode 为对文件的操作模式,通常使用:“wb”(写操作),“rb”(读操作);
如果打开文件成功返回一个指向FILE结构的指针;否则,返回一个NULL指针;
"fclose",
fclose(FILE* name);
关闭文件流,name 为之前打开的文件指针,如这里的filename;
如果执行成功返回0,否则返回EOF;
e.g: fclose(fp);
"ftell",
long ftell(FILE *stream);
表示返回下一个读取或者写入将要开始的位置距离文件起始位置的偏移量。
e.g:
fseek(fp,5,SEEK_SET);
int i = ftell(fp); //这里i=5;
"fseek",
int fseek(FILE *stream, long offset, int from);
表示对将要写入的位置的定位;
stream为打开的文件指针,filename;
offset为距离from参数的相对距离;
from为定位的基准;模式为:SEEK_SET(从流的起始位置起,往后offset个字节)
SEEK_CUR(从流的当前位置起,往前往后offset个字节)
SEEK_END(从流的末尾起,往前往后offset个字节)
e.g:
fseek(fp,-5,SEEK_END);
fread(buf,1,4,fp);
"fgets",
char *fgets( char *buffer, int buffer_size, FILE* stream);
从指定的stream读取字符,并复制到buffer中。当读取到一个换行符号“\n”并存储到缓冲区之后就不在读取;如果缓冲区内存储的字符数达到buffer_size-1个时,同样停止读取。
下次调用fgets将从流的下一个字符开始读取。在任何一个情况下,一个NUL字节降被添加到缓冲区所存储数据的末尾,使之成为一个字符串;
如果失败,fgets返回一个NULL指针;否则返它的第一个参数(指向缓冲区的指针);
e.g:
char* ret = fgets(buf,512,fp); //成功,则返回buf指针;
"fprintf",
int fprintf(FILE *stream,char const *format,......) // 将数据转换成字符串文本,并写入stream文件中;
等于:
char buf[512];
sprintf(buf,"%s\n",fp);
fwrite(buf,1,strlen(line),fp);
e.g : fprintf(fp, "%s\n", buf);
"fwrite",
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
size 恒为1;
将buffer中的 count个字节写入到文件steam中;
e.g:
fwrite(buf,1,4,fp);
"fread",
size_t fread(const void* buffer,size_t size, size_t count ,FILE *stream)
size恒为1; 从stream文件中读取count个字节存放buffer中;
返回值为:实际读取到的字节个数;
e.g:
fread(buf,1,4,fp);
"feof",
int feof(FILE *stream);
如果流当前处于文件尾,feof函数返回真。
e.g:
while (!feof(fp))
{
char* ret = fgets(buf, 512, fp);
if (ret)
{
printf("got::%s", ret);
}
}
举例:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int main() { const char* filename = "d:/aaa.txt"; FILE* fp = fopen(filename, "wb"); if (fp == NULL) { printf("failed to open file\n"); return -1; } char buf[10] = {0}; int m, n; printf("请输入两个整数:"); scanf("%d%d",&m,&n); sprintf(buf,"m=%d,n=%d",m,n); fwrite(buf,1, strlen(buf), fp); //fprintf(fp,"f=%d,g=%d",m,n); fclose(fp); system("pause"); return 0; }