读取文件的代码如下,但是数据是一起读出的,怎么用指针一个一个将数据读出然后再分别赋值?
本人新手,大家多多帮助啊void CModalDlg::OnRead()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
if(fileDlg.DoModal() == IDOK)
{
CString str = fileDlg.GetPathName();
FILE* pfile = fopen( str, "rt" );
fscanf(pfile,"%d",&m_x0);
TCHAR szBuf[MAX_PATH];
fread(szBuf, 1, MAX_PATH, pfile ); // 读取文件
GetDlgItem(IDC_x0)->SetWindowText(szBuf); // 写控件
fclose(pfile);
}
}
MFCedit box
本人新手,大家多多帮助啊void CModalDlg::OnRead()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
if(fileDlg.DoModal() == IDOK)
{
CString str = fileDlg.GetPathName();
FILE* pfile = fopen( str, "rt" );
fscanf(pfile,"%d",&m_x0);
TCHAR szBuf[MAX_PATH];
fread(szBuf, 1, MAX_PATH, pfile ); // 读取文件
GetDlgItem(IDC_x0)->SetWindowText(szBuf); // 写控件
fclose(pfile);
}
}
MFCedit box
解决方案 »
- 在类中定义声明 静态函数,但是定义出了问题
- 文件监测,哪些文件被进程读取?
- CDatabase连接SQL Server如何写连接字符串
- 对话框中的内存泄漏
- 请教一个关于皮肤设计问题!
- 我的DLL改为Release编译后出问题了,怎么办?
- 如何不使用文本框而实现类似的显示效果?
- 谁有最简单的讲解多线程编程的对话框源程序,请发致[email protected],收到后即给分,在线等待
- 请教高手数据库中数据删除的问题
- Message Maps 中为什么找不到 OnWindowPosChanging ?
- raw socket发送原始tcp报文之后,接受数据包的问题?
- 这样编译为何无法通过 ( 函数 Return )
这句没有,不好意思打错了,剩下的部分怎么修改?
或者可以让文件里每行数据对应一个控件,利用CStdioFile::ReadString每次读一行,赋给每个控件。
CString str = _T("12 23 344 45 56 67 78 999");//假设这是你从文件读出来的
CStringArray saEdit[8]; //用来存放8个控件数据,
int i = 0;
while (str.GetLength())
{
i=str.Find(' '); //空格
CString strtmp;
if (-1!=i)
{
strtmp = str.Left(i);
str=str.Mid(i+1);
}
else
{
strtmp=str;
str=_T("");
} saEdit->Add(strtmp);
}
你试试
你知道sizeof(double)等于多少吗,
贴个msdn的例子,楼主再看看吧,
Example
/* FREAD.C: This program opens a file named FREAD.OUT and
* writes 25 characters to the file. It then tries to open
* FREAD.OUT and read in 25 characters. If the attempt succeeds,
* the program displays the number of actual items read.
*/#include <stdio.h>void main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten; /* Open file in text mode: */
if( (stream = fopen( "fread.out", "w+t" )) != NULL )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
/* Write 25 characters to stream */
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream ); }
else
printf( "Problem opening the file\n" ); if( (stream = fopen( "fread.out", "r+t" )) != NULL )
{
/* Attempt to read in 25 characters */
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Output
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb
TCHAR szBuf[MAX_PATH];
fread(szBuf, 1, MAX_PATH, pfile ); // 读取文件
GetDlgItem(IDC_x0)->SetWindowText(szBuf); // 写控件
?????
你的数据是字符串吗?有 MAX_PATH-1 或者MAX_PATH-2 长度吗??
这里结尾,没有设置结束符,你确定数据里有结束符吗,
只有确定szBuf中存储了字符串,才可以SetWindowText(szBuf); 这样使用。
通过二进制编辑器(一般用2位16进制显示一个字符,4位16进制显示一个汉字),可以查看文件的具体内容。0 这个整数,字符型(char)显示为 MBCS 00,UNICODE16 字符型(wchar_t)显示为 00 00 如果是32位整数 00 00 00 00
'0' 这个字符,MBCS (char)显示为30,UNICODE16(wchar_t) 显示为 30 00
'\0' 这个字符,MBCS (char)显示为0,UNICODE16(wchar_t) 显示为 00 00 这个是字符串结束符。
另外:
MFC EDIT 控件,一般会 定义为 整数,浮点数,字符串,然后赋值;通过UpdateData(FALSE),从而调用动态数据交换,把数据从变量,传送到控件。而UpdateData(TRUE),UpdateData()则是, 调用动态数据交换,函数名是DoDataExchange,把数据从控件,传送到变量。
也可以 定义为控件类型,那就可以直接操作了,有可能不需要UpdateDataEDIT控件快速操作,可以用Replace操作,SetWindowText()要比 Replace慢多了。
虽然Replace代码更多,更复杂。
if(fileDlg.DoModal() == IDOK)
{
CString str = fileDlg.GetPathName();
FILE* pfile = fopen( str, "rt" );
fread( &m_x0, sizeof(double), 1, pfile);
fread( &m_y0, sizeof(double), 1, pfile);
fread( &m_f0, sizeof(double), 1, pfile);
fread( &m_XT, sizeof(double), 1, pfile);
fread( &m_YT, sizeof(double), 1, pfile);
fread( &m_ZT, sizeof(double), 1, pfile);
fread( &m_m, sizeof(double), 1, pfile);
fread( &m_H, sizeof(double), 1, pfile);
UpdateData(FALSE);//如果,数据正确的话,这样就可以显示了。
fclose(pfile);
}