VC++中如何获取打开的文件内容?
我在对话框中设置了一个按钮,用来打开文件,弹出“打开文件”对话框,选定文件打开后,如何获取打开了的文本文件的内容,文件是点的坐标文件。要求放在两个数组里面,一个存放点名,一个存放坐标。
部分代码如下:
void CTransform::OnOpenfile()
{
// TODO: Add your control notification handler code here
CFileDialog FileDlg(TRUE);
FileDlg.m_ofn.lpstrTitle= "打开文件 ";
FileDlg.m_ofn.lpstrFilter= "Text Files(*.txt)\0*.txt\0ALL Files(*.*)\0*.*\0\0 ";
if(IDOK==FileDlg.DoModal())
{
CFile file(FileDlg.GetFileName(),CFile::modeRead);
char *pBuf;
DWORD dwFileLen;
dwFileLen=file.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file.Read(pBuf,dwFileLen);
file.Close();
MessageBox(pBuf);//显示打开的文件,可以显示。
//接着就是如何把pBuf所指向的数据进行分离并存放在不同数组里面的问题了,各位达人帮帮忙哈~小弟感激不尽!!急啊!~!~!
文件格式如下:
点1 4581691.012 556114.680 4389360.696
点2 4581691.026 556114.686 4389360.685
点3 4627846.128 119629.178 4372999.723
点4 4627846.140 119629.184 4372999.712
点5 4433469.953 362672.672 4556211.610
点6 4433470.008 362672.669 4556211.623
点7 2587384.489 -1043033.504 5716563.979
点8 2587384.500 -1043033.500 5716563.969
点9 2679690.006 -727951.336 5722789.146
点10 2679690.021 -727951.331 5722789.142
点11 2102940.337 721569.379 5958192.113
点12 2102940.346 721569.384 5958192.101
[解决办法]
由于上面的代码不是在开发工具中写的,所以有很多错误,请多原谅
void CTransform::OnOpenfile()
{
CString mTempStr; //保存每行文本
CString strItem[4]; //保存每行文本分离的子字符串
CString strPointName[1000]; //点名称
double mPoint[1000][3];//点坐标
int cnt = 0;
// TODO: Add your control notification handler code here
CFileDialog FileDlg(TRUE);
FileDlg.m_ofn.lpstrTitle= "打开文件 ";
FileDlg.m_ofn.lpstrFilter= "Text Files(*.txt)\0*.txt\0ALL Files(*.*)\0*.*\0\0 ";
if(IDOK==FileDlg.DoModal())
{
CStdioFile file(FileDlg.GetFileName(),CFile::modeRead);
while (file.ReadString(mTempStr))
{
mTempStr.TrimRight();
//提取出4段子字符串
for (int i = 0; i < 4; i++)
{
AfxExtractSubString(strItem[i], mTempStr, i, ' ');
}
//对数值进行保存
strPointName[cnt] = strItem[0];
mPoint[cnt][0] = atof(strItem[1]);
mPoint[cnt][1] = atof(strItem[2]);
mPoint[cnt][2] = atof(strItem[3]);
cnt++;
}
file.Close();
}
}
[解决办法]
CFileDialog FileDlg(TRUE);
FileDlg.m_ofn.lpstrTitle= "打开文件 ";
FileDlg.m_ofn.lpstrFilter= "Text Files(*.txt)\0*.txt\0ALL Files(*.*)\0*.*\0\0 ";
if(IDOK==FileDlg.DoModal())
{
FILE *fp;
char ch[100];
float x, y, z;
if( (fp = fopen(FileDlg.GetFileName(), "r ")) != NULL )
{
while(!feof(fp))
{
fscanf(fp, "%s %f %f %f ", ch, &x, &y, &z );
}
}
}