write 函数这样写对不对?  高分求解

rfit 2001-07-19 02:10:34
编程环境为 win2000,

我要把 CString s="abc" 写到一个文件里。如下:

CFile f(fn, CFile::modeCreate | CFile::modeWrite );
f.SeekToBegin();
f.Seek(20,CFile::current ); //打算从文件开头20个字节后开始写字符串。

char buff[100];  //建立一个大的数组。字符串肯定超不过100个字节。
CString str=s;

strncpy(buff,str.GetBuffer(str.GetLength()),sizeof(buff)/sizeof(char)-1);
str.ReleaseBuffer();
f.Write(buff,100);
f.Close();

这样写对不对?

我如何读取呢? 
...全文
82 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nustchen 2001-07-19
上面这样写好象没什么问题,可以简化为直接将str写进文件
f.write( str.GetBuffer( str.GetLength() ), str.GetLength() )
读的时候同样的过程,将write换成read就行了。
回复
vlmf 2001-07-19
一种改进的方法:
 struct l_strbuf
{
UINT nSize;
CHAR tBuf[50];
};
struct s_strbuf
{
UINT nSize;
CHAR tBUF[100];
}; // 目的是为了省点空间
历一种方法: 写入回车换行符但读是效率不高。
回复
1.你以modeCreate ¦ modeWrite 方式打开文件,那么即使文件已经存在,也被清空了,
所以f.Seek(20,CFile::current )肯定不成功!

2.字符数组一定要初始化,memset (buff, 0, sizeof(buff));

3.以modeRead 方式打开文件
char szBuf[100];
f.read(szBuf,100);
回复
不解 2001-07-19
1.很对。
2.用read读就行啊!
回复
vlmf 2001-07-19
1.  f.Seek(20,CFile::current ); //是不是一定可以成功呢, 你的文件一开是有没有这么大
2.  建议你这样写入字符串
  CHAR lpBuf[100];
ZeroMemory(lpBuf,100);
// then copy the string into lpBuf
// 注意 '\0 ' 字符的写入问题
f.Write(lpBuf,100);

 读时:
CHAR lpBuf[100];
f.read(lpBuf,100);
回复
rfit 2001-07-19
我要写3个字符串呀, 读出3个字符串。
回复
HashCodeWithJava 2001-07-19
你那种方法会写入写怪字符进去的
你没有初始化buff[100]
譬如
buff[100]中你只要前30个字符,那么后70个字符就是那些怪字符了.
回复
HashCodeWithJava 2001-07-19
为什么这么复杂?
照你的意思,一条语句就搞顶了
file.Write(s,s.GetLength());
回复
rfit 2001-07-19
不行呀, 而且非常急,上午必须完成。
回复
panda_w 2001-07-19
有人回答了还问?
回复
rfit 2001-07-19
please
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-19 02:10
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……