|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 问个小问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
613
人关注过本帖
标题:
问个小问题
只看楼主
加入收藏
yz1025
等 级:
蝙蝠侠
威 望:
6
帖 子:491
专家分:919
注 册:2012-10-26
结帖率:
95.56%
楼主
收藏
已结贴
√
问题点数:20 回复次数:12
问个小问题
........
nwDataSize =fwrite(&btaryBuffer[0],sizeof (char), nDataSize, stream2);
这行要是过了~程序就完结了~
但是程序跑到这行死机~猜测可能原因是档案太大~超过1GB的二进制档案~
不知道fwrite的上限是多少~求解~
nDataSize=1266682177
&btaryBuffer[0]=这个阵列起始位址
搜索更多相关主题的帖子:
二进制
档案
2013-01-10 18:13
举报帖子
使用道具
赠送鲜花
yz1025
等 级:
蝙蝠侠
威 望:
6
帖 子:491
专家分:919
注 册:2012-10-26
第
2
楼
收藏
得分:0
之前验过600MB是OK的~程序也用了半年左右没出过问题~
这次因为单一档案越来越大~就遇上了~
不要投我
2013-01-10 18:15
举报帖子
使用道具
赠送鲜花
azzbcc
来 自:江西财经大学
等 级:
贵宾
威 望:
81
帖 子:3293
专家分:12919
注 册:2012-11-4
第
3
楼
收藏
得分:10
蛮好奇,就百度了下,好fwrite是先读到缓冲区的,我也不懂,等大牛吧
http://bbs.
[fly]存在即是合理[/fly]
2013-01-10 18:35
举报帖子
使用道具
赠送鲜花
azzbcc
来 自:江西财经大学
等 级:
贵宾
威 望:
81
帖 子:3293
专家分:12919
注 册:2012-11-4
第
4
楼
收藏
得分:0
我说的不对。。。嗯
[fly]存在即是合理[/fly]
2013-01-10 18:36
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
5
楼
收藏
得分:10
你一条语句读完整个文件啊?
授人以渔,不授人以鱼。
2013-01-10 18:40
举报帖子
使用道具
赠送鲜花
yz1025
等 级:
蝙蝠侠
威 望:
6
帖 子:491
专家分:919
注 册:2012-10-26
第
6
楼
收藏
得分:0
unsigned long CN_BUFFER_SIZE =(unsigned long)GetFileLength(FileName);
unsigned char *btaryBuffer=new unsigned char[CN_BUFFER_SIZE];
fseek(stream1, 0, SEEK_SET);strcpy(Code,"0");
while (nDataSize =fread(btaryBuffer,sizeof (char),CN_BUFFER_SIZE, stream1))
//读完整个文件
{
......
}
stream2 = fopen(TmpFileNameStr, "wb" );
nwDataSize =fwrite(&btaryBuffer[0],sizeof (char), nDataSize, stream2);
//写完整个文件
不要投我
2013-01-10 18:46
举报帖子
使用道具
赠送鲜花
yz1025
等 级:
蝙蝠侠
威 望:
6
帖 子:491
专家分:919
注 册:2012-10-26
第
7
楼
收藏
得分:0
抱歉~是我眼睛瞎了~
问题不在那~~所以目前fwrite无上限~
听说同事是4GB~针对IO的部分~
不要投我
2013-01-10 18:56
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
8
楼
收藏
得分:0
你取的缓冲块大小就是文件的长度GetFileLength(),是一次把整个文件读完,当然文件越大,需求的内存越大了,32位程序最多只有4G内存,数据的极限是2G。
授人以渔,不授人以鱼。
2013-01-10 19:02
举报帖子
使用道具
赠送鲜花
wube
等 级:
贵宾
威 望:
23
帖 子:1820
专家分:3681
注 册:2011-3-24
第
9
楼
收藏
得分:0
以下是引用
TonyDeng
在2013-1-10 19:02:14的发言:
你取的缓冲块大小就是文件的长度GetFileLength(),是一次把整个文件读完,当然文件越大,需求的内存越大了,32位程序最多只有4G内存,数据的极限是2G。
原来如此~记下了~因为一开始开发时~使用者给的档案都才200MB左右~
一来更大的档案不多见~二来没理由找自己麻烦去做切割处理的动作~
效率上也不会比较快~但是随着时代进步~代码也得跟着不断更新适应各种情况~
所以急迫性的问题暂时解决了~但是长远来看~还是得做分段处理的动作~
因为档案会长到多大~我已经无法掌握~而使用者只会有两个结论~
能用~不能用~但是12亿多个字~要切割处理~错一个字都不行~感觉就很麻烦~
还是感谢各位的协助~日后应该还会有问题需要来请教的~
不要選我當版主
2013-01-10 20:04
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
10
楼
收藏
得分:0
不是一次性读就快的。必须分割读,这是一定的,但要反复测试每一次读的块应是多大,这与C库和操作系统设置的缓冲机制有关,也与运行时实际可支配的快速内存有关(即尽量不要迫使系统使用交换内存页)。
授人以渔,不授人以鱼。
2013-01-10 20:10
举报帖子
使用道具
赠送鲜花
13
1/2页
1
2
快速回复:
问个小问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.040406 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved