vc中写入文件和读取文件的问题!
我有2个问题是关于vc文件写入和读取的!第一是,我要把我对话框的edit控件中写入的文字,保存在文件中!相关代码如下:charszFilters[]="TXTFiles(...
我有2个问题是关于vc文件写入和读取的!
第一是,我要把我对话框的edit控件中写入的文字,保存在文件中!相关代码如下:
char szFilters[]= "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
//设置打开后缀名为txt的文件
CFileDialog fileDlg (false, "txt", "",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
CString okman;
okman=="";
m_edit1.GetWindowText(okman);
if (okman=="")
{
MessageBox("你什么都没写啊!");
}
else
{
if( fileDlg.DoModal()==IDOK )
{
CString fileName = fileDlg.GetPathName();
CFile file(fileName, CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive);
CArchive ar(&file, CArchive::store|CArchive::bNoFlushOnDelete);
UpdateData(TRUE);
ar<<okman;
ar.Close();
问题是比如我在控件中写入了 abcd 结果用记事本打开保存文件的时候编程了 +(一个随机的符号)abcd 成了5个字符了!这是什么原因?
第二个是在读取文件时所有的空格和换行都不见了编程了密密麻麻的文字代码如下:
void CV5Dlg::OnFileOpen()
{
// TODO: Add your control notification handler code here
char szFilters[]=
"TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
//设置打开后缀名为txt的文件
CFileDialog fileDlg (TRUE, "txt", "*.txt",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if( fileDlg.DoModal()==IDOK )
{
CString pathName = fileDlg.GetPathName();
CStdioFile out;
out.Open(pathName, CFile::modeRead);
CString sSql="",s;
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
GetDlgItem(IDC_EDIT1)->SetWindowText(sSql); //显示文本
UpdateData(FALSE);
}
}
高手来帮帮忙了,小弟在这里万分感激! 展开
第一是,我要把我对话框的edit控件中写入的文字,保存在文件中!相关代码如下:
char szFilters[]= "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
//设置打开后缀名为txt的文件
CFileDialog fileDlg (false, "txt", "",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
CString okman;
okman=="";
m_edit1.GetWindowText(okman);
if (okman=="")
{
MessageBox("你什么都没写啊!");
}
else
{
if( fileDlg.DoModal()==IDOK )
{
CString fileName = fileDlg.GetPathName();
CFile file(fileName, CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive);
CArchive ar(&file, CArchive::store|CArchive::bNoFlushOnDelete);
UpdateData(TRUE);
ar<<okman;
ar.Close();
问题是比如我在控件中写入了 abcd 结果用记事本打开保存文件的时候编程了 +(一个随机的符号)abcd 成了5个字符了!这是什么原因?
第二个是在读取文件时所有的空格和换行都不见了编程了密密麻麻的文字代码如下:
void CV5Dlg::OnFileOpen()
{
// TODO: Add your control notification handler code here
char szFilters[]=
"TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
//设置打开后缀名为txt的文件
CFileDialog fileDlg (TRUE, "txt", "*.txt",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if( fileDlg.DoModal()==IDOK )
{
CString pathName = fileDlg.GetPathName();
CStdioFile out;
out.Open(pathName, CFile::modeRead);
CString sSql="",s;
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
GetDlgItem(IDC_EDIT1)->SetWindowText(sSql); //显示文本
UpdateData(FALSE);
}
}
高手来帮帮忙了,小弟在这里万分感激! 展开
展开全部
第一个问题:因为<<操作符定义里没有直接对CString的输入操作
//插入操作
CArchive& operator<<(BYTE by);
CArchive& operator<<(WORD w);
CArchive& operator<<(LONG l);
CArchive& operator<<(DWORD dw);
CArchive& operator<<(float f);
CArchive& operator<<(double d);
CArchive& operator<<(int i);
CArchive& operator<<(short w);
CArchive& operator<<(char ch);
CArchive& operator<<(unsigned u);
将CString 类型转换成char 型是添加的特殊符号。
你可以这样解决:CArchive类中有个成员方法专门解决String类型数据输入。
将你的代码里的<<换成 ar.WriteString(okman); 这样就可以解决这个问题了,我在VC里调试通过了。
char szFilters[]= "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
// TODO: Add your control notification handler code here
CFileDialog fileDlg (false, "txt", "",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
CString okman;
okman==_T("");
m_edit1.GetWindowText(okman);
MessageBox(okman);
if (okman=="")
{
MessageBox("你什么都没写啊!");
}
else
{
if( fileDlg.DoModal()==IDOK )
{
CString fileName = fileDlg.GetPathName();
CFile file(fileName, CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive);
CArchive ar(&file, CArchive::store|CArchive::bNoFlushOnDelete);
ar.WriteString(okman); /////写入字符串。
ar.Close();
UpdateData(TRUE);
}
}
第二个问题:按照上述修改过后没有出现你说的问题,在以二进制存入文件是换行被解释为回车+换行,具体的你去看看孙鑫的教程有详细的说明。
可能是编辑框的属性你没选上Multiline 和 VerticalScroll 等等你自己查查
//插入操作
CArchive& operator<<(BYTE by);
CArchive& operator<<(WORD w);
CArchive& operator<<(LONG l);
CArchive& operator<<(DWORD dw);
CArchive& operator<<(float f);
CArchive& operator<<(double d);
CArchive& operator<<(int i);
CArchive& operator<<(short w);
CArchive& operator<<(char ch);
CArchive& operator<<(unsigned u);
将CString 类型转换成char 型是添加的特殊符号。
你可以这样解决:CArchive类中有个成员方法专门解决String类型数据输入。
将你的代码里的<<换成 ar.WriteString(okman); 这样就可以解决这个问题了,我在VC里调试通过了。
char szFilters[]= "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||";
// TODO: Add your control notification handler code here
CFileDialog fileDlg (false, "txt", "",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
CString okman;
okman==_T("");
m_edit1.GetWindowText(okman);
MessageBox(okman);
if (okman=="")
{
MessageBox("你什么都没写啊!");
}
else
{
if( fileDlg.DoModal()==IDOK )
{
CString fileName = fileDlg.GetPathName();
CFile file(fileName, CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive);
CArchive ar(&file, CArchive::store|CArchive::bNoFlushOnDelete);
ar.WriteString(okman); /////写入字符串。
ar.Close();
UpdateData(TRUE);
}
}
第二个问题:按照上述修改过后没有出现你说的问题,在以二进制存入文件是换行被解释为回车+换行,具体的你去看看孙鑫的教程有详细的说明。
可能是编辑框的属性你没选上Multiline 和 VerticalScroll 等等你自己查查
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询