- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制文件操作(read文件不完就读取结束问题解决)二进制文件操作(read文件不完就读取结束问题解决)
一、问题:
读取一个二进制文件,通过fstat获取出来的文件大小,与通过read接口读取的字节总和不相等,文件总是读到文件某一个位置时read返回读取字节数为0,即文件结束了,不知为何,如下面代码在执行时会返回如下错误:
nbytes=0
tstat.st_size=49664 real read=6 ,49658 bytes cant read
实际上盖文件大小为49664,但只读了6字节就不能再读了,即read返回字节数为0,程序退出。打开该二进制文件,发现读到ASCII的1A(即SUB)控制字符时就不能再读了,即使文件还没有结束。
解决:
经过网上资料,终于找到原因,对于二进制文件读取,一定要采用二进制格式打开文件:
错误代码:
if ((fd = open(1, O_RDONLY,0666 ))0)
{
perror(open:);
return(1);
}
正确代码:(增加O_BINARY即可):
/* open a file for update */
if ((fd = open(1, O_RDONLY|O_BINARY,0666 ))0) //vldb.DB0
{
perror(open:);
return(1);
}
二、其它知识:
对于文件操作有两套:open/read/lseek/write/close
fopen/fread/fseek/fwrite/fclose
1)前者是文件底层接口,后者是在前者基础上封装
2)前者的文件句柄是int,后者是FILE结构
3)后者的fread会自动开辟缓存,前者没有缓存,这样,fread的性能一般比read好,但是,由于fread自动开辟缓存,其占用的内存可能不受控制,对于内存大小严格控制的程序,还是需要用read。
三、两套文件操作接口程序实例:
// fileoperation.cpp : Defines the entry point for the console application.
//
#include stdafx.h
#include sys/stat.h
#include io.h
#include fcntl.h
#include stdio.h
#include time.h
int fileoperate1();
int fileoperate2();
int main(int argc, char* argv[])
{
fileoperate1();
return 0;
}
int fileoperate1()
{
struct stat tstat;
int fd;
int code = 0;
int length, tlen, offset, nbytes;
unsigned char tbuffer[1024];
/* open a file for update */
if ((fd = open(1, O_RDONLY|O_BINARY,0666 ))0) //vldb.DB0
{
perror(open:);
return(1);
}
/* get information about the file */
code = fstat(fd, tstat);
if (code 0) {
goto StoreEndCall;
}
length = tstat.st_size;
offset = 0;
while (length 0)
{
tlen = (length sizeof(tbuffer) ? sizeof(tbuffer) : length);
code = lseek(fd, offset , SEEK_SET);
if (code 0) {
goto StoreEndCall;
}
nbytes = read(fd, tbuffer, tlen);
if (nbytes != tlen)
{
printf(Local disk read error=%d offset=%ld lengt
您可能关注的文档
- 七年级综合实践教学计划七年级综合实践教学计划.doc
- 七年级语文上 23 《伤仲永》二则 人教版教案七年级语文上 23 《伤仲永》二则 人教版教案.doc
- 七年级上学期期末语文试卷分析七年级上学期期末语文试卷分析.doc
- 万州区普子中心小学班主任考核制度万州区普子中心小学班主任考核制度.doc
- 三八妇女节保险销售销售技巧10页三八妇女节保险销售销售技巧10页.doc
- 三、四、五六年级科学下册实验教学计划三、四、五六年级科学下册实验教学计划.doc
- 三十三团城镇化提升年现场会简介三十三团城镇化提升年现场会简介.doc
- 三位专家建言新型城市化三位专家建言新型城市化.doc
- 三台县中小学首席心理教师工作职责规范三台县中小学首席心理教师工作职责规范.doc
- 七年级学生成绩册评语七年级学生成绩册评语.doc
最近下载
- 大学生的智慧篮球_西南交通大学中国大学mooc课后章节答案期末考试题库2023年.docx
- 2024年中考语文真题分类汇编非连及其他文本.docx VIP
- 《公差配合与测量技术》复习试卷三套含答案.docx
- 高考语文复习:古诗文补充背诵篇目——《贺新郎·国脉微如缕》课件23张.pptx
- 外研版(三年级起点)六年级上册英语期末《作文》专项训练(附范文).docx
- 四川省成都市第七中学2024-2025学年高二上学期11月期中考试 政治含解析.pdf
- 四川省2023-2024学年 四川省高职考第一轮系统性考试-智能制造类应知+应会(含答案).pdf VIP
- [中央]2023年中国社会科学院农村发展研究所招聘笔试历年高频考点(难、易错点)附带答案详解.docx VIP
- 英语语音达标测试题知识.pdf VIP
- 公务员考试行测辅导类比推理必会对应关系解析.docx VIP
文档评论(0)