想选择路径打开文件 将内容输出到编辑框 程序运行弹出一个对话框 显示叉号和乱码
void CTCPClientExDlg::Sendfile()
{
CFile MyFile;
TCHAR str[100];
DWORD count;
UpdateData(true);
CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("All Files(*.*)|*.*||"));
if(FileDlg.DoModal()==IDOK)
{
m_FileName=FileDlg.GetPathName();
MyFile.Open (_T("\\m_FileName"),CFile::modeRead); //打开文件
long sendlen =MyFile.GetLength() ; //得到文件长度
count=MyFile.Read (str,sendlen); //读文件
m_Content=str; //将文件内容输出到编辑框
MyFile.Close (); //关闭文件
UpdateData(false); //更新显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
}
}
大家帮忙看看程序吧 新手求助
建议楼主考虑一下编码的问题,在WinCE下显示必须是UNICODE编码。
楼上能不能详细说说
我现在出来打开文件对话框 选择文件后就弹出一个对话框 显示叉号和乱码 我选择的是.dat文件 里面就几个字母而已
引用: 引用 4 楼 hpp6699 的回复:
改用VS2005,很好用的
工具改变不了这个问题的
主要是 Unicode的问题。因为文本通常是ANSI的,要CE下显示必须使用Unicode,需要调用字符转换函数。
具体的函数名不记得了,google一下就可以找到。
但是我的开发板带的实例都是EVC的 我是拿开发板带的TCP/IP的例子改的 不仅要打开文件 主要是想传输的
MyFile.Open (_T("\\m_FileName"),CFile::modeRead); //打开文件
要使用绝对路径
准备一段buf,如char szBuf[256];
将文件内容读取到szBuf中,
定义一个CString s;
s.Format(_T("%S"),szBuf);//注意是大写的S
显示s即可。
引用: 引用 7 楼 cfanlwn 的回复:
MyFile.Open (_T("\\m_FileName"),CFile::modeRead);? ? ? ? ? //打开文件
要使用绝对路径
李MM 在wince下是要用绝对路径 现在我想的是选择一个文件代开 用绝对路径该怎么表示呢
引用: 引用 8 楼 sunrain_hjb 的回复:
准备一段buf,如char szBuf[256];
将文件内容读取到szBuf中,
定义一个CString s;
s.Format(_T("%S"),szBuf);//注意是大写的S
显示s即可。
我把文件内容读取到szBuf中
szBuf=MyFile.Read (str,sendlen); 报错
error C2440: '=' : cannot convert from 'unsigned int' to 'unsigned short [256]'
错误看明白了 该怎么改呢
根据大家的意见 程序改成
void CTCPClientExDlg::OnSendfile()
{
CFile MyFile;
TCHAR str[100];
DWORD count;
CHAR szBuf[256];
UpdateData(true);
CString s;
MyFile.Open (_T("\\qwe.dat"),CFile::modeRead);
//long sendlen =MyFile.GetLength() ; //得到文件长度
count=MyFile.Read ( szBuf, sizeof(szBuf)); //读文件
s.Format(_T("%S"),szBuf); //注意是大写的S
m_SendEdit=s; //将文件内容输出到编辑框
MyFile.Close (); //关闭文件
UpdateData(false); //更新显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
}
但是现在直接出来 Read OK 对话框 ,没有把文件内容输出到编辑框啊 大家帮忙看看
引用: 引用 9 楼 l840828 的回复:
引用 7 楼 cfanlwn 的回复:
MyFile.Open (_T("\\m_FileName"),CFile::modeRead);? ? ? ? ? //打开文件
要使用绝对路径
李MM 在wince下是要用绝对路径 现在我想的是选择一个文件代开 用绝对路径该怎么表示呢
你打开文件,这个文件也有路径啊,通过软件是可以得到它的路径的
void GetCurrentDirectory(CString &szPath)
{
wchar_t pBuf[256];
GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t));
szPath=pBuf;
szPath = szPath.Left(szPath.ReverseFind('\\')+1);
}
引用: 引用 11 楼 l840828 的回复:
根据大家的意见 程序改成
void CTCPClientExDlg::OnSendfile()
{
CFile MyFile;
TCHAR str[100];
DWORD count;
CHAR? szBuf[256];
? ? ? ? UpdateData(true);
CString s;
MyFile.Open (_T("\\qwe.dat"),CFile::modeRead);
? ? ? ? //long sendlen =MyFile.GetLength() ; ? ? //得到文件长度
? ? ? ? count=MyFile.Read ( szBuf,? sizeof(szBuf)); //读文件
? ? ? ? s.Format(_T("%S"),szBuf);? ? ? ? ? ? ? ? ? ? ? ? //注意是大写的S
? ? ? ? m_SendEdit=s; //将文件内容输出到编辑框
MyFile.Close (); //关闭文件
UpdateData(false); //更新显示
AfxMessageBox(_T("Read OK")); ? ? ? ? //输出读成功消息
}
但是现在直接出来? Read OK? 对话框 ,没有把文件内容输出到编辑框啊 大家帮忙看看
我用你这样的方法 是可以把内容输出出来的啊 是不是你的编辑框在类向导中没有定义m_SendEdit
测试OK了,可以参考一下
CFile MyFile;
CString m_FileName;
CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("All Files(*.*)|*.*||"));
if(FileDlg.DoModal()==IDOK)
{
m_FileName=FileDlg.GetPathName();
MyFile.Open (m_FileName,CFile::modeRead); //打开文件
DWORD sendlen =MyFile.GetLength() ; //得到文件长度
CHAR *szBuf=new CHAR [sendlen];//开辟存储空间
MyFile.Read ( szBuf, sendlen); //读文件
m_Content.Format(_T("%S"),szBuf); //注意是大写的S
MyFile.Close (); //关闭文件
UpdateData(false); //更新编辑框显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
delete []szBuf;//清除存储空间
}