| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1371 人关注过本帖
标题:[求助]问个关于文件读取的问题,CFile的
只看楼主 加入收藏
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
 问题点数:0 回复次数:9 
[求助]问个关于文件读取的问题,CFile的

我看到一段如下所示的程序:

//...把当前目录设定为要打开的文件的所在目录
CFile file;
file.Open("test.txt",CFile::modeReadWrite);
BYTE buffer[0x1000];
UINT remaining=file.GetLength();
UINT read;
while(remaining)
{
read=file.Read(buffer,sizeof(buffer));
remaining-=read;
}
file.Close();

我想确认一下,上面的代码把文件test.txt按每次4K的内容读出并存储到buffer中,

请问,当test.txt内容为6k时,前4k内容存到了buffer中,

然后,剩下的2k内容,是覆盖了原来4k的前2k的内容,还是在4k的后面再追加2k的内容?

[此贴子已经被作者于2007-10-11 14:15:38编辑过]

搜索更多相关主题的帖子: CFile buffer 文件 file test 
2007-10-11 14:12
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
文件指针会自动向后偏移,也就是你说的"追加"

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 14:39
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
得分:0 
文件指针会自动向后移动我当然知道,

但我想问的是:buffer开始时只声明了4k的空间,而文件有6k,

那当这段代码运行完后,buffer所代表的4k空间中,是文件的前4k内容呢,

还是变成,前2k是文件的末尾2k内容,后2k是文件前4k的后2k内容。



比如,文件内容是ABCDEF

那当代码运行之后,buffer的4k内容是ABCD呢?还是EFCD?
2007-10-11 14:47
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
read=file.Read(buffer,sizeof(buffer));

比如buffer为4k

那你这句相当于
read=file.Read(buffer,4);

当然只读前4个字节..而后面就不读了.

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 14:49
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
得分:0 
我有这个循环啊

UINT remaining=file.GetLength();
UINT read;
while(remaining)
{
read=file.Read(buffer,sizeof(buffer));
remaining-=read;
}

这个循环应该保证了文件被从头到尾读了一次了
2007-10-11 14:53
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
得分:0 
我想问,当文件(6k)被这样从头到尾read了一次后,buffer中的东西到底是什么。。。
2007-10-11 14:55
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 

覆盖


★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 16:10
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
得分:0 
果然。。。。

那么我想问,一般牵涉到文件读取的情况,都是先预设一块缓存区,用来放读出的数据,当文件比缓存要大的时候,是怎么解决这个问题的呢?

像一般的文档编辑软件,打开文件后,文件的内容基本就读出来了,是用什么方法管理缓存的?
2007-10-11 16:37
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
CFile file;
file.Open("test.txt",CFile::modeReadWrite);
BYTE *buffer;
UINT remaining=file.GetLength();
buffer = new BYTE[remaining];
UINT read;
read=file.Read(buffer,sizeof(buffer));
file.Close();

//.......对buffer操作.

delete buffer;

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 16:48
Whnight
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-14
收藏
得分:0 

啊。。。确实 OTL。。。

谢谢版主,那么耐心地给我讲解。。。原来这么简单,看来我自己应该多想一下才对。。。

2007-10-11 17:25
快速回复:[求助]问个关于文件读取的问题,CFile的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023573 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved