文件和数组

ostrich2fly 2008-10-20 03:56:36
将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个
字符存到新文件的第一个字符,以此类推。

这是网上的一个题目,
问题是1.用ifstream读取这个文件的时候,能否保证一次就将文件全部读入?MSDN上似乎是说只有一种情况,先到达文件末尾这样读入字节数目才不对。

问题2. 这个文件不小,所以需要的buff也不小,new 或者 栈上的内存 都不能保证一次分配成功吧?如果分配不成功?要进行多次?

怎么样才能做到可靠?希望贴源码,谢谢。
...全文
250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
study_live 2008-10-20
  • 打赏
  • 举报
回复

ifstream ifs;
ofstream ofs;

char buffer[1000];
ifs.open("f:\\a.txt", ios_base::in);
ofs.open("f:\\b.txt", ios_base::out | ios_base::app);

ifs.seekg(0,ios_base::end);
int cb = ifs.tellg();
while (cb>0)
{
int size;
if (cb<1000)
{
size = cb;
}
else
{
size = 1000;
}

ifs.seekg(-size, ios_base::cur);
ifs.read(buffer, 1000);

cb-=size;
for (int i = size-1; i>=0; i--)
{
ofs<<buffer[i];
}
}
pierre200328 2008-10-20
  • 打赏
  • 举报
回复
c99中有标准函数,设置buf的大小。看过,具体那个忘记了。
另外,也可以考虑文件映射createfilemapping在unix下是mmap,系统封装将文件操作作为内存操作。
wesleyluo 2008-10-20
  • 打赏
  • 举报
回复
一次读出后,你要怎么把他逆序写入呢?
OenAuth.Core 2008-10-20
  • 打赏
  • 举报
回复
将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个
字符存到新文件的第一个字符,以此类推。

这是网上的一个题目,
问题是1.用ifstream读取这个文件的时候,能否保证一次就将文件全部读入?MSDN上似乎是说只有一种情况,先到达文件末尾这样读入字节数目才不对。
以现在的处理技术来说完全可以保证,10M的文件算是小文件啦,曾经我测试时,用魔兽的压缩文件来试的(嘿嘿~~*-_-*),差不多600多M吧,也就只是卡了几秒钟的事而已。

问题2. 这个文件不小,所以需要的buff也不小,new 或者 栈上的内存 都不能保证一次分配成功吧?如果分配不成功?要进行多次?
栈肯定是不行了,堆可以。现在的内存用的有虚拟内存技术,内存不够可以直接从硬盘里拉,当然用完了一定要释放,不然~~~~

怎么样才能做到可靠?希望贴源码,谢谢。
系统自己已经相当可靠了,别太担心
帅得不敢出门 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lann64 的回复:]
10M很小的啦,一次就读完了。用os的缓冲也可以。
[/Quote]
一次读取貌似挺大的.我觉得还是从后往前copy
要不从后分块读出来,然后再从后分块写到文件中.
hai040 2008-10-20
  • 打赏
  • 举报
回复
fstream会自己管理buf,文件大的话应该不会全部读
内存不足除了报错退出好像也不能怎么处理
lann64 2008-10-20
  • 打赏
  • 举报
回复
10M很小的啦,一次就读完了。用os的缓冲也可以。
ostrich2fly 2008-10-20
  • 打赏
  • 举报
回复
不是一个字节一个自己的吧?

这也太慢了吧?
我的问题是buff的长度 多少合适
独孤过儿 2008-10-20
  • 打赏
  • 举报
回复
1、open()文件
2、获得文件的长度
3、将文件指针定位到文件末尾
4、从后往前开始copy
5、转储到另一个文件

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧