size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
参数:
返回:
成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
参数:
返回:
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
fseek一般用于二进制文件的指针移动,也可以用于文本文件,但操作的stream必须是已经打开的文件。如果没有打开的文件,那么将会出现错误。
int fseek(FILE *stream, long int offset, int whence)
参数:
常量 | 描述 |
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |
返回:
如果成功,则该函数返回零,否则返回非零值
偏移必须正确:fseek的第二个参数offset偏移位置正数表示向后(文件结尾的方向)移动,负号表示向前(文件开头的方向)移动。
使用这个文件指针移动函数需要注意:
1. 文件指针fp必须正确,否则返回错误。
2. offset和whence的值必须逻辑正确(偏移必须正确),否则文件指针会移动到未知位置。
3. 移动文件指针后,原有的读取位置将失效,需要重新读取数据。
4. 移动文件指针是较为消耗性能的操作,不建议频繁调用。
5. 调用fclose()后文件指针将不再有效,无法再次访问文件。
6. 该函数依赖于操作系统,移植性较差,实现细节依赖具体系统。
fseek(fp,0,SEEK_END)是一个文件操作函数,用于移动文件指针到文件末尾,我们可以利用这个功能读取文件末尾的数据,实现类似文件尾部插入或者修改的操作。
这个函数移动文件指针的主要步骤为:
1. 检查文件指针fp是否正确,如果不正确会返回错误。
2. 当whence为SEEK_END时,offset值为0,表示从文件末移动文件指针。
3. 函数会将文件指针移动到文件末尾的位置。
4. 如果移动成功,函数返回0,否则返回-1。
使用这个文件指针定位函数需要注意:
1. 文件指针fp必须是有效的,通过fopen()等函数打开的文件流。否则会返回错误。
2. whence参数为SEEK_END时offset必须小于等于0,表示从文件末尾向前移动。其他值会导致文件指针定位错误。
3. 移动文件指针后,原先的读取位置将失效。需要重新定位指针才能继续之前的读写操作。
4. 移动文件指针是一个相对比较消耗资源的操作,不建议频繁调用。
5. 调用fclose()关闭文件后,文件指针将不再有效,无法继续定位或访问。
6. 该函数是C语言标准库中的文件操作函数,不具备跨平台移植性,实现依赖于操作系统。
fseek(fp,0,SEEK_END);//将文件指针偏移到文件末尾
int fielsize=ftell(fp);// 判断当前文件指针移动了多少个字节,即移动到了末尾即该文件含字节数
if (size != fielsize)//如果文件大小与定值结构体大小不一致 这初始化该定值设,size为预定文件大小
fseek(fp,0,SEEK_SET)也是一个文件操作函数,用于将文件指针移动到文件起始位置,可以利用这个功能实现从文件起始位置进行数据的修改、删除或插入等操作。
这个函数移动文件指针的主要步骤为:
1. 检查文件指针fp是否正确,如果不正确会返回错误。
2. whence为SEEK_SET时,offset值为0,表示从文件起始位置移动文件指针。
3. 函数会将文件指针移动到文件开始的位置。
4. 如果移动成功,函数返回0,否则返回-1。
使用这个文件指针定位函数需要注意:
1. 文件指针fp必须是有效的,通过fopen()等函数打开的文件流。否则会返回错误。
2. whence参数为SEEK_SET时offset必须大于等于0,表示从文件起始位置向后移动。其他值会导致文件指针定位错误。
3. 移动文件指针后,原先的读取位置将失效。需要重新定位指针才能继续之前的读写操作。
4. 移动文件指针是一个相对比较消耗资源的操作,不建议频繁调用。
5. 调用fclose()关闭文件后,文件指针将不再有效,无法继续定位或访问。
6. 该函数是C语言标准库中的文件操作函数,不具备跨平台移植性,实现依赖于操作系统。
在读取(fread)和写入(fwrite)前或后一般都需要fseek首先定位到需要的光标位置。
long int ftell(FILE *stream)
参数:
返回:
该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。
这个函数获取文件指针位置的主要步骤为:
1. 检查文件指针fp是否正确,如果不正确会返回-1L。
2. 函数会返回文件指针当前的位置,相对于文件起始位置的偏移量。
3. 返回值类型为long int,可以精确表示文件指针的位置。
4. 如果获取文件指针位置成功,函数会返回当前位置的偏移量,否则返回-1L。
使用这个文件指针位置获取函数需要注意:
1. 文件指针fp必须是有效的,通过fopen()等函数打开的文件流。否则会返回-1L错误值。
2. 返回的偏移量是相对文件起始位置的字节数,所以文件指针最远可以访问文件大小-1的位置。
3. 如果文件指针超出文件尾部,此函数仍然可以获取位置,但实际读取的数据未定义。
4. 该函数返回的位置在下次文件操作后可能会变化,需要及时记录或更新。
5. 调用fclose()关闭文件后,文件指针将不再有效,无法继续获取位置或访问。
6. 该函数是C语言标准库中的文件操作函数,不具备跨平台移植性,实现依赖于操作系统。
FILE *fopen(const char *filename, const char *mode)
参数:
模式 | 描述 |
"r" | 打开一个用于读取的文件。该文件必须存在。 |
"w" | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
"r+" | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
"w+" | 打开可读写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
"rw+" | 读写打开一个文本文件,允许读和写。 |
"rb" | 打开一个用于读取的二进制文件。该文件必须存在。 |
"wb" | 只写打开或新建一个二进制文件;只允许写数据 |
"rb+" | 读写打开一个二进制文件,允许读数据 |
"wb+" | 读写打开或建立一个二进制文件,允许读和写 |
返回:
成功则返回一个 FILE 指针。
失败返回 NULL,且设置全局变量 errno 来标识错误。
int fclose(FILE *stream)
参数:stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流
返回值:如果流成功关闭,则该方法返回零。如果失败,则返回 EOF。
使用fopen,fseek,ftell编写获取文件大小函数
long getFilesize(char *filename)
{
FILE *fp = fopen(filename, "rb");
fseek(fp, 0, SEEK_END);
long filesize = ftell(fp);
fclose(fp);
return filesize;
}