关于CFile读写的问题(急急急急!!!)

mickeyhao85 2009-01-02 12:39:18
关于CFile的读写我有点疑惑

CFile file;
file.open(path,CFile::modeWrite)
往文本中写的时候一定要文本存在吧,如果文本不存在是创建的,得加上CFile::modeCreate是吧?

不太明白有时为什么要用CreateFile

HANDLE hFile=CreateFile( Filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);

CFile file((int)hFile);

不是直接用CFile::modeCreate 就可以创建吗?有什么区别这两个...望详解...

问题2:
文本不存在我直接往里面写了(只用了modeWrite如下),在模拟器里面好像文本也创建了一切正常,也没报错...
CFile file;
file.open(path,CFile::modeWrite)
但我在正式平台上运行程序的时候
程序在file.close这句就自动退出了,也没报错,很奇怪...我现在分析可能是文件没创建的原因...
希望高手帮我分析下

望高手详细回答上面两个问题,最好帮我详细介绍下CFile类
THX!
...全文
159 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mickeyhao85 2009-01-06
THX各位了
莫名其妙的自己又好了
回复
weidong0210 2009-01-04
学习
回复
noenoughmemory 2009-01-03
不懂,up
回复
naxiahucao 2009-01-03
MFC
回复
qzf368 2009-01-03
学习了
回复
Cpp权哥 2009-01-03
你可以检查open函数的返回值,如果为真表示打开成功,为假表示失败。
回复
ccpaishi 2009-01-03
createfile是win的sdk,任何windows上的文件函数,最终都是调用这个函数来实现的
回复
一名程序员 2009-01-03
void CFile::Close()
{
ASSERT_VALID(this);
ASSERT(m_hFile != (UINT)hFileNull);

BOOL bError = FALSE;
if (m_hFile != (UINT)hFileNull)
bError = !::CloseHandle((HANDLE)m_hFile);

m_hFile = (UINT) hFileNull;
m_bCloseOnDelete = FALSE;
m_strFileName.Empty();

if (bError)
CFileException::ThrowOsError((LONG)::GetLastError());
}

以上是CFile::Close()的源代码。其中楼主的程序估计是在最后一行抛出了异常。
也就是说bError = !::CloseHandle((HANDLE)m_hFile);一句可能有问题。
但具体的问题,可能与楼主Open的时候设置的参数不当有关系。
回复
Show_Mike 2009-01-03
注意这点区别:
1.如果文件不存在,而你是moderead,那么就会出错;
2.如果文件不存在,而采用modewrite,那么系统自动创建一个长度为0的文件,可以往里面写.
不妨根据这个思路运行一下你的程序,检查一下生成的文件,看看里面内容是否你写入的.
回复
mickeyhao85 2009-01-02
第二个问题高手们发表点意见啊...
回复
bluesky395 2009-01-02
学习
回复
蒋晟 2009-01-02
CreateFile是面向过程的,支持各种语言
CFile是面向对象的,只能在MFC程度里面用
回复
schlafenhamster 2009-01-02
file.open(path,CFile::modeWrite) 文件不存在时会Create一个0长度的文件.
文件存在时把文件文件长度截为0.
回复
wocow3 2009-01-02
CreateFile 是SDK API,是底层
CFile是MFC类,是基于SDK API的
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2009-01-02 12:39
社区公告
暂无公告