得到一个CFile怎么把它转化成CStdioFile?

koji003 2008-03-24 09:05:45
RT
...全文
91 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
[Quote=引用 5 楼 diudiuqqqq 的回复:]
我看了下转换后MyStdioFile 是空的,好象这样转换不行呀
[/Quote]
这就是为什么要使用dynamic_cast转换的原因,
如果空就表示后面的指针不是CStdioFile类型,无法进行转换,只能用CFile;
回复
koji003 2008-03-24
看来只有自己写CFile的读一行的代码了
回复
diudiuqqqq 2008-03-24
楼上的这个方法我早试过....好象不行的....

楼上的楼上....我的文件是不落地的....也就是说没有文件名
回复
laoma_hbu 2008-03-24
>>看了一下MSDN
class B { ... };
class D : public B { ... };
void f()
{
B* pb = new D; // unclear but ok
B* pb2 = new B;

D* pd = dynamic_cast<D*>(pb); // ok: pb actually points to a D
D* pd2 = dynamic_cast<D*>(pb2); //error: pb2 points to a B, not a D
// pd2 == NULL
}

This type of conversion is called a “downcast” because it moves a pointer down a class hierarchy, from a given class to a class derived from it.

把CFile *MyFile = new CFile(); 改成CFile *MyFile = new CStdioFile();应该就可以了
回复
shakaqrj 2008-03-24
我在想
你一定要转换么?
Cfile到cstdiofile有几个要素?
文件名
你获得文件名在新建一个cstdiofile不就行了?

或者m_hFile,可能也有帮助
回复
diudiuqqqq 2008-03-24
据说会差很多....
回复
xstong1982 2008-03-24
CStdioFile的ReadString其实也很好实现,就是一个一个字符得读,读到\n就结束,作为一行输出,自己写个ReadLine的函数就可以了,速度上不会差吧
回复
diudiuqqqq 2008-03-24
我也想啊....现在的情况是服务器就传过来一个CFile类,要求是文件不落地就是不上硬盘直接处理,CFile类一行一行读好象很麻烦
回复
diudiuqqqq 2008-03-24
我看了下转换后MyStdioFile 是空的,好象这样转换不行呀
回复
xstong1982 2008-03-24
CStdioFile是继承CFile的,所以虽然从CFile强转到CStdioFile,但是一些CStdioFile自有的函数,如ReadString,WriteString应该不能正常使用吧,还不如直接用CStdioFile打开文件呢
回复
diudiuqqqq 2008-03-24
谢谢一楼
又有一个问题,转化为CStdioFile后我用ReadString就会出错...
我的代码现在是这个样子的

CFile *MyFile = new CFile();
CString strFileStr;
MyFile->Open(TEXT("Text.txt"), CFile::modeRead);

CStdioFile* MyStdioFile = new CStdioFile();
MyStdioFile = dynamic_cast <CStdioFile*>(MyFile);
MyStdioFile->ReadString(strFileStr);

编译可以通过.调试运行到ReadString就会报错
回复
laoma_hbu 2008-03-24
学习
回复
CFile* p = ....;

CStdioFile* pSF= dynamic_cast<CStdioFile*>( p );
回复
shakaqrj 2008-03-24
[Quote=引用 11 楼 diudiuqqqq 的回复:]


楼上的楼上....我的文件是不落地的....也就是说没有文件名
[/Quote]
汗,那如何打开的?
我不是很理解(水平比较菜,表介意,呵呵~~)
回复
diudiuqqqq 2008-03-24
CFile MyFile;
CString strFileStr = "";
char strFileChar;
MyFile.Open(_T("Text.txt"), CFile::modeRead);

while(MyFile.Read(&strFileChar,1))
{
if(strFileChar == '\n')
{
MessageBox(strFileStr);
strFileStr = "";
}
else
{
strFileStr = strFileStr + strFileChar;
}
}
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-24 09:05
社区公告

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