弱智抓蛙男 发表于 2006-12-17 11:45

用CFile 打开文件出错,求助

<P>//代码片段如下:<BR>//打开文件<BR>bool File_manager::Open_file(CString path)<BR>{<BR>    CFile info_file;<BR>    CString str_buffer;<BR>    CFileException cfe;<BR>    //AfxMessageBox(path);<BR>    if(info_file.Open(path,CFile::shareDenyNone,&amp;cfe) == 0)<BR>    {<BR>        return FALSE;<BR>    }<BR>    CArchive ar(&amp;info_file,CArchive::load);<BR>    ar&gt;&gt;str_buffer;<BR>    //info_file.Read(str_buffer,2);<BR>    AfxMessageBox(str_buffer);<BR>    ar.Close();<BR>    info_file.Close();<BR>    return TRUE;<BR>}<BR>第一次用vc++.net打开文件,水平有限,<BR>编译通过,打开某个txt文件时出错信息为:<BR><BR>“试图越过其尾端对一个未知名的文件进行读写”<BR><BR>2个都是txt文件,一个能读,一个要出这个错,不知道为什么,请高手解答,<BR>不甚感激!!</P>

弱智抓蛙男 发表于 2006-12-17 11:48

2个txt文件,一个内容简单:<BR>sdfasdfasdfasdfsadf<BR>dsfasdfasdfasd<BR>sadfasdfasdf<BR>

弱智抓蛙男 发表于 2006-12-17 11:51

<P>另一个大一点:<BR><a href="http://www.codeproject.com/listctrl/" target="_blank" >http://www.codeproject.com/listctrl/</A><BR><a href="http://www.vckbase.com/document/listdoc.asp?mclsid=3&amp;sclsid=323" target="_blank" >http://www.vckbase.com/document/listdoc.asp?mclsid=3&amp;sclsid=323</A></P>
<P>void CChildFrame::OnFileOpen() <BR>{<BR>   // szFilters is a text string that includes two file name filters:<BR>   // "*.my" for "MyType Files" and "*.*' for "All Files."<BR>   char CChildFrame::szFilters[]=<BR>      "MyType Files (*.my)|*.my|All Files (*.*)|*.*||";</P>
<P>   // Create an Open dialog; the default file name extension is ".my".<BR>   CFileDialog fileDlg (TRUE, "my", "*.my",<BR>      OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);<BR>   <BR>   // Display the file dialog. When user clicks OK, fileDlg.DoModal() <BR>   // returns IDOK.<BR>   if( fileDlg.DoModal ()==IDOK )<BR>   {<BR>      CString pathName = fileDlg.GetPathName();<BR>   <BR>      // Implement opening and reading file in here.<BR>      ...<BR>      //Change the window's title to the opened file's title.<BR>      CString fileName = fileDlg.GetFileTitle ();<BR>   <BR>      SetWindowText(fileName);<BR>   }</P>
<P>}</P>
<P>All items in a list view control must have the same number of subitems.</P>
<P>Class CListCtrl provides several functions for inserting, deleting, finding, and modifying these items. For more information, see CListCtrl::GetItem, CListCtrl::InsertItem, and CListCtrl::FindItem, Using CListCtrl: Adding Items to the Control, and Using CListCtrl: Scrolling, Arranging, Sorting, and Finding in List Controls.</P>
<P><BR>                    VC中ctrllist的使用与数据库链接 </P>
<P>清浪冲天 马敬发 QQ: 283989349   E-mail: <a href="mailto:mjf150080@tom.com" target="_blank" >mjf150080@tom.com</A> </P>
<P>有问题时,我们可以通过<a href="http://www.hustc.mpc.cn" target="_blank" >http://www.hustc.mpc.cn</A> 这个论坛,</P>
<P>或 通过QQ 共同学习和讨论 </P>
<P><BR> </P>
<P>// DIALOG_TRAINCOURSE.cpp : implementation file<BR>//</P>
<P>#include stdafx.h<BR>#include train.h<BR>#include DIALOG_TRAINCOURSE.h<BR>#include CourseInfo.h<BR>#include DIALOG_APPISE.h<BR>#include CourseSet.h</P>
<P>#ifdef _DEBUG<BR>#define new DEBUG_NEW<BR>#undef THIS_FILE<BR>static char THIS_FILE[] = __FILE__;<BR>#endif</P>
<P>/////////////////////////////////////////////////////////////////////////////<BR>// CDIALOG_TRAINCOURSE dialog</P>
<P><BR>CDIALOG_TRAINCOURSE::CDIALOG_TRAINCOURSE(CWnd* pParent /*=NULL*/)<BR> : CDialog(CDIALOG_TRAINCOURSE::IDD, pParent)<BR>{<BR> //{{AFX_DATA_INIT(CDIALOG_TRAINCOURSE)<BR>  // NOTE: the ClassWizard will add member initialization here<BR> //}}AFX_DATA_INIT<BR>}</P>
<P><BR>void CDIALOG_TRAINCOURSE::DoDataExchange(CDataExchange* pDX)<BR>{<BR> CDialog::DoDataExchange(pDX);<BR> //{{AFX_DATA_MAP(CDIALOG_TRAINCOURSE)<BR> DDX_Control(pDX, IDC_LIST1, m_content);<BR> //}}AFX_DATA_MAP<BR>}</P>
<P><BR>BEGIN_MESSAGE_MAP(CDIALOG_TRAINCOURSE, CDialog)<BR> //{{AFX_MSG_MAP(CDIALOG_TRAINCOURSE)<BR> ON_BN_CLICKED(IDC_BUTTONADD, OnButtonadd)<BR> ON_BN_CLICKED(IDC_BUTTONDEL, OnButtondel)<BR> //}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()</P>
<P>/////////////////////////////////////////////////////////////////////////////<BR>// CDIALOG_TRAINCOURSE message handlers</P>
<P>void CDIALOG_TRAINCOURSE::OnButtonadd() <BR>{<BR> // TODO: Add your control notification handler code here<BR> m_database.Close();<BR> CCourseInfo m_courseinfo;<BR> m_courseinfo.m_database.Open(_T(train));<BR> m_courseinfo.DoModal();<BR> RefreshData();<BR>}</P>
<P>void CDIALOG_TRAINCOURSE::OnOK() <BR>{<BR> // TODO: Add extra validation here<BR> CDIALOG_APPISE m_apprisemanager;<BR> int i=m_content.GetSelectionMark();<BR> CString strSQL;<BR> if(i==-1){<BR>  MessageBox(please choose a course first!);<BR> }<BR> else{<BR>  m_apprisemanager.course_id=atoi(m_content.GetItemText(i,0));<BR>  m_database.Close();<BR>  m_apprisemanager.m_database.Open(_T(train));<BR>  m_apprisemanager.DoModal();<BR> }</P>
<P>}</P>
<P>BOOL CDIALOG_TRAINCOURSE::OnInitDialog() <BR>{<BR> CDialog::OnInitDialog();<BR> <BR> // TODO: Add extra initialization here<BR> m_content.InsertColumn(0,课程号);<BR> m_content.InsertColumn(1,课程类别);<BR> m_content.InsertColumn(2,课程中文名称);<BR> m_content.InsertColumn(3,课程英文名称);<BR> m_content.InsertColumn(4,课程描述);<BR> m_content.InsertColumn(5,课程学时);<BR> m_content.InsertColumn(6,教材);<BR> m_content.InsertColumn(7,等效课程);<BR> m_content.InsertColumn(8,预修课程);<BR> m_content.InsertColumn(9,初训/复训标志);<BR> m_content.InsertColumn(10,开课部门);<BR> RECT rect;<BR> m_content.GetWindowRect(&amp;rect);<BR> int wid = rect.right - rect.left;<BR> m_content.SetColumnWidth(0,wid/11);<BR> m_content.SetColumnWidth(1,wid/11);<BR> m_content.SetColumnWidth(2,wid/11);<BR> m_content.SetColumnWidth(3,wid/11);<BR> m_content.SetColumnWidth(4,wid/11);<BR> m_content.SetColumnWidth(5,wid/11);<BR> m_content.SetColumnWidth(6,wid/11);<BR> m_content.SetColumnWidth(7,wid/11);<BR> m_content.SetColumnWidth(8,wid/11);<BR> m_content.SetColumnWidth(9,wid/11);<BR> m_content.SetColumnWidth(10,wid/11);<BR> m_content.SetExtendedStyle(LVS_EX_FULLROWSELECT);<BR> RefreshData(); <BR> <BR> return TRUE;  // return TRUE unless you set the focus to a control<BR>               // EXCEPTION: OCX Property Pages should return FALSE<BR>}</P>
<P>void CDIALOG_TRAINCOURSE::RefreshData()<BR>{<BR> if(!m_database.IsOpen()){<BR>  m_database.Open(_T(train));<BR> }<BR> m_content.DeleteAllItems();<BR> CCourseSet m_recordset(&amp;m_database);<BR> CString strSQL;<BR> strSQL.Format(select * from COURSE);<BR> m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);<BR> CDBVariant varValue;<BR> if(m_recordset.GetRecordCount()!=0) m_recordset.MoveFirst();<BR> char buf[20];<BR> int i=0;<BR> while(!m_recordset.IsEOF())<BR> {<BR>  int temp=0;<BR>  m_recordset.GetFieldValue(temp,varValue);<BR>  sprintf(buf,%d,varValue.m_iVal); m_content.InsertItem(i,buf);<BR>  m_recordset.GetFieldValue(1,varValue);<BR>  m_content.SetItemText(i,1,varValue.m_pstring-&gt;GetBuffer(1));<BR>  m_recordset.GetFieldValue(2,varValue);<BR>  m_content.SetItemText(i,2,varValue.m_pstring-&gt;GetBuffer(1));<BR>  m_recordset.GetFieldValue(3,varValue);<BR>  m_content.SetItemText(i,3,varValue.m_pstring-&gt;GetBuffer(1));<BR>  m_recordset.GetFieldValue(4,varValue);<BR>  m_content.SetItemText(i,4,varValue.m_pstring-&gt;GetBuffer(1));<BR>  m_recordset.GetFieldValue(5,varValue);<BR>  sprintf(buf,%d,varValue.m_iVal); m_content.SetItemText(i,5,buf);<BR>  m_recordset.GetFieldValue(6,varValue);<BR>  m_content.SetItemText(i,6,varValue.m_pstring-&gt;GetBuffer(1));<BR>  m_recordset.GetFieldValue(7,varValue);<BR>  sprintf(buf,%d,varValue.m_iVal); m_content.SetItemText(i,7,buf);<BR>  m_recordset.GetFieldValue(8,varValue);<BR>  sprintf(buf,%d,varValue.m_iVal); m_content.SetItemText(i,8,buf);<BR>  m_recordset.GetFieldValue(9,varValue);<BR>  sprintf(buf,%d,varValue.m_chVal); m_content.SetItemText(i,9,buf);<BR>  m_recordset.GetFieldValue(10,varValue);<BR>  sprintf(buf,%d,varValue.m_iVal); m_content.SetItemText(i,10,buf);<BR>  m_recordset.MoveNext();<BR>  i++;<BR> }<BR>}</P>
<P>void CDIALOG_TRAINCOURSE::OnButtondel() <BR>{<BR> // TODO: Add your control notification handler code here<BR> int i=m_content.GetSelectionMark();<BR> CString strSQL;<BR> if(i==-1){<BR>  MessageBox(please choose a record first!);<BR> }<BR> else{<BR>  int keyid=atoi(m_content.GetItemText(i,0));<BR>  strSQL.Format(delete from COURSE where COURSE_ID=%d,keyid);<BR>  m_database.ExecuteSQL(strSQL);<BR>  strSQL.Format(delete from COURSE_EVALUATION where COURSE_ID=%d,keyid);<BR>  m_database.ExecuteSQL(strSQL);<BR>  m_database.Close();<BR>  RefreshData();<BR> } <BR>}</P>
<P>void CDIALOG_TRAINCOURSE::OnCancel() <BR>{<BR> // TODO: Add extra cleanup here<BR> m_database.Close();<BR> CDialog::OnCancel();<BR>}</P>


页: [1]

编程论坛