文件写入自定义格式化的实现(详细见内容)

xiangmin 2005-10-26 11:05:52
void CChecknumDlg::OnSaveAs()
{
// TODO: Add your control notification handler code here

CFileDialog dlg(FALSE,
"jak",
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
"file (*.jak)|*.jak|all file(*.*)|*.*|",
this);

if(IDOK == dlg.DoModal ())
{
CString strfilename = dlg.GetFileName();
CString strpathname = dlg.GetPathName();
CFile myFile;
CFileFind myFindfile;
if(myFindfile.FindFile (strfilename) == FALSE)
{
myFile.Open (strfilename,CFile::modeCreate|CFile::modeWrite);
myFile.SeekToBegin ();
nCount =m_listCtrl.GetItemCount();
for(int i = 0 ; i <3 ; i++)
{
for(int j = 0 ; j < nCount ; j++)
{
CString item=m_listCtrl.GetItemText(j,i);
item+="\r\n";
myFile.Write (item,item.GetLength ());
}

}
myFile.Close ();

文本保存后读写内容为:
Scribble.res
vc60.idb
Scribble.pch
vc60.pdb
StdAfx.obj
ChildFrm.obj
MainFrm.obj
Scribble.ilk
Scribble.exe
Scribble.pdb
0xEA
0x4A
0xD3
0x9A
0xC0
0xBA
0x0C
0x56
0xDC
0xCE
10-11-05 15:03:14
10-11-05 16:51:40
10-11-05 15:03:16
10-11-05 16:51:40
10-11-05 15:03:16
10-11-05 15:03:16
10-11-05 15:03:16
10-11-05 15:08:06
10-11-05 15:08:06
10-11-05 15:08:06
现在我希望读出内容为:
Scribble.res 0xEA 10-11-05 15:03:14
vc60.idb 0x4A 10-11-05 16:51:40
Scribble.pch 0xD3 10-11-05 15:03:16
vc60.pdb 0x9A 10-11-05 16:51:40
StdAfx.obj . .
ChildFrm.obj . .
MainFrm.obj . .
Scribble.ilk . .
Scribble.exe . .
Scribble.pdb . .

在语法上要怎么实现?
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DrSmart 2005-10-26
  • 打赏
  • 举报
回复
mark
xiangmin 2005-10-26
  • 打赏
  • 举报
回复
好犀利啊,真棒,可以了~~~谢谢你们哦,加分加分,呵呵~~
xiangmin 2005-10-26
  • 打赏
  • 举报
回复
rtdb(东临碣石):
我原先是按照横向格式写入的,但是无法对齐所以又改成竖向格式,现在我把它写回横向:
for(int i = 0 ; i <nCount ; i++)
{
for(int j = 0 ; j < 3 ; j++)
{

CString item=m_listCtrl.GetItemText(i,j);
myFile.Write (item,item.GetLength ( ));
}
}

文件保存结果为:
Scribble.res0xEA10-11-05 15:03:14vc60.idb0x4A10-11-05 16:51:40Scribble.pch0xD310-11-05 15:03:16vc60.pdb0x9A10-11-05 16:51:40StdAfx.obj0xC010-11-05 15:03:16ChildFrm.obj0xBA10-11-05 15:03:16MainFrm.obj0x0C10-11-05 15:03:16Scribble.ilk0x5610-11-05 15:08:06Scribble.exe0xDC10-11-05 15:08:06Scribble.pdb0xCE10-11-05 15:08:06
接下去我应该怎么做才能象Scribble.res 0xEA 10-11-05 15:03:14
的格式呢?
koko1998 2005-10-26
  • 打赏
  • 举报
回复
循环明显写反了
red-fly 2005-10-26
  • 打赏
  • 举报
回复
nCount =m_listCtrl.GetItemCount();
for(int i = 0 ; i <3 ; i++)
{
for(int j = 0 ; j < nCount ; j++)
{
CString item=m_listCtrl.GetItemText(j,i);
item+="\r\n";
myFile.Write (item,item.GetLength ());
}

}
改成如下:

nCount =m_listCtrl.GetItemCount();
for ( int j = 0; j < nCount; j++ )
{
CString strText, strTemp;
strText = _T("");
for ( int i = 0; i < 3; i++ )
{
strTemp.Format( "%-22s", m_listCtrl.GetItemText( j, i );
strText += strTemp;
}
strText += "\r\n";
myFile.Write( strText, str.GetLength() );
}

看一看,非常整齐!
i_noname 2005-10-26
  • 打赏
  • 举报
回复
for(int j = 0 ; j < nCount ; j++)
{
CString item;
for(int i = 0 ; i < 3 ; i++)
{
item += m_listCtrl.GetItemText(j,i);
item += " ";
}
item+="\r\n";
myFile.Write (item,item.GetLength ());
}
hfeiyang 2005-10-26
  • 打赏
  • 举报
回复
那为什么你保存的时候就不能按你想读出的格式进行保存呢?你希望按什么格式读出,那也就按什么格式写入不就完了吗...
快乐鹦鹉 2005-10-26
  • 打赏
  • 举报
回复
如果你希望以你所写的方式读取,那么建议你还是修改存储策略,这样最合理也最方便。
将for(int i = 0 ; i <3 ; i++)
{
for(int j = 0 ; j < nCount ; j++)
这两个循环交换一下顺序,那么就方便多了。
rtdb 2005-10-26
  • 打赏
  • 举报
回复
你最好把文件格式改成:
Scribble.res, 0xEA, 10-11-05 15:03:14
就会好读多了。

你现在的格式,因为不知道文件个数,所以还需要另外的检查,就要麻烦一些了。

16,551

社区成员

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

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

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