文件操作问题(打开读取数据)

ssboy 2004-03-22 02:07:50
void CDrawView::OnImport()
{
// TODO: Add your command handler code here
CStdioFile file;
CString filename;
CString str;

CFileDialog opendlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,".(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);
if(opendlg.DoModal()==IDOK)
filename=opendlg.GetPathName();
if(file.Open(filename,CFile::modeReadWrite|CFile::typeText)==0){
AfxMessageBox("error");
return;
}
file.Read(&m,sizeof(int));
file.Read(&n,sizeof(int));
str.Format("%d",m);
MessageBox(str);

}
我导入的文件里面是内容应该是 50,200
怎么程序运行后,显示的是839528501的?
...全文
42 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssboy 2004-03-23
  • 打赏
  • 举报
回复
楼上的可以讲详细点吗?
谢谢!
potatoli 2004-03-23
  • 打赏
  • 举报
回复
这个不太好解释,其实所谓的十进制、二进制或十六进制只是一个表示的方法,一切都只是0和1组成的比特流,你可以把它们看成数字。
字符和数字也没什么区别,对于ANSI字符来说,只是规定了那个数字对应地表示成哪个字符而已。例如字符'a'的值是97,所以 char cTemp = 'a' 和 char cTemp = 97是一样的。
50,200表示成16进制就是35 30 2c 32 30 30,你的程序是把35 30 2c 32读入了int型的m,值自然不对了,可以这样写:

CString strLine = _T("");
int iCommaIdx = -1; //逗号的位置

if( !file.ReadString( strLine)) //读一行
{
//error
}

iCommaIdx = strLine.Find( ','); //取得逗号的位置
if( iCommaIdx < 0)
{
//error
}

m = atoi( strLine.Left( iCommaIdx)); //50
n = atoi( strLine.Right( strLine.GetLength() - iCommaIdx - 1)); //200
远古猛犸象 2004-03-22
  • 打赏
  • 举报
回复
CStdioFile::ReadString
ssboy 2004-03-22
  • 打赏
  • 举报
回复
那如果我想读txt文件里面,形如:50 200之类的整数,应该怎么读呢?
那个txt文件的文件名,我想在程序运行的时候,才确定。
potatoli 2004-03-22
  • 打赏
  • 举报
回复
文件应该是按照文本方式写的吧,程序把字符串"50,2"赋值给整数m了,上面的程序需要二进制的文件。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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