EVC下的文件操作,文件明明存在,但是打开时提示文件不存在?????

subalada   2008-6-3 12:06 楼主
建立文件:
void TestWenJian::OnButton2()
{
        // TODO: Add your control notification handler code here
       
        CString strtxt;
       
        if(CreateFile(_T("mytxt.txt"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0))
        {
                MessageBox(_T("文件创建成功"),NULL,MB_OK);
               
        }
}
打开文件:
void TestWenJian::OnOK()
{
        // TODO: Add extra validation here
        CString strtxt;
        m_wenjian.GetWindowText(strtxt);
        int jbbz;
        jbbz=0;
        CFile myfile;
        myfile.Open(_T("mytxt.txt"),CFile::OpenFlags::modeWrite);
}
这是建立和打开的代码,哪里有问题吗??还有就是我发现如果直接将EVC中的文件名复制到程序中可以打开,但是不能先建立,如果建立了也就不能打开了?????

回复评论 (7)

在创建的时候调用CreateFile函数了隐含了打开文件,所以在OnButton2中创建完后应该调用关闭文件函数将打开的文件句柄关掉
点赞  2008-6-3 23:46
文件名指定错误,CE下必须使用全路径。因为CE没有相对路径这个概念。
点赞  2008-6-4 07:58
2楼正解!
点赞  2008-6-4 08:59
我觉得应该是1楼说的对。

lz没有关闭文件,第二次当然不能打开了。
  1. HANDLE hfile = INVALID_HANDLE_VALUE;
  2. hfile = CreateFile(_T("mytxt.txt"),GENERIC_READ |GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  3. if(hfile != INVALID_HANDLE_VALUE)
  4. {
  5. MessageBox(_T("文件创建成功"),NULL,MB_OK);

  6. }

  7. CloseHandle(hfile);
点赞  2008-6-4 09:49
直接写名字,缺省就在\My Computer\下,没有问题。

问题出在你的建立函数里面,建立了文件,也就打开了文件,你没有关闭,所以你这别的地方再打开时就提示出错了。
我是这么写的,测试了,没有问题。
void CEvcDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        CString strtxt;
HANDLE hFile;
        if(hFile=CreateFile(_T("mytxt.txt"),GENERIC_READ |GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0))
        {
                MessageBox(_T("file create success!"),NULL,MB_OK);
                CloseHandle(hFile);
        }
}

void CEvcDlg::OnButton2()
{
        // TODO: Add your control notification handler code here
        //CString strtxt;
        //m_wenjian.GetWindowText(strtxt);
        BOOL bbb;
        int jbbz;
        jbbz=0;
        CFile myfile;
        bbb=myfile.Open(_T("mytxt.txt"),CFile::OpenFlags::modeWrite);
        if(bbb)
                MessageBox(_T("file open success!"),NULL,MB_OK);
}
点赞  2008-6-4 12:26
学习了。。
点赞  2008-6-4 21:37
直接使用C下的文件打开方式,就简单的多
  1.         CString strName,m_sStr;

  2.         char c[20];       

  3.         CFileDialog dlg(FALSE, NULL, _T("NONAME.dat"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  4.                 _T("curve Files(*.dat)|*.dat|Notepad Files(*.txt)|*.txt|All Files(*.*)|*.*|"));
  5.        
  6.         if(dlg.DoModal()==IDOK)
  7.         {
  8.                
  9.                 strName=dlg.GetPathName();
  10.                
  11.                 for(int j=0;j
  12.                 {
  13.                         c[j]=dlg.GetPathName().GetAt(j);
  14.                 }
  15.                
  16.                 c[j]='\0';
  17.                
  18.                 FILE *pFile=fopen(c,"wb");
  19.                
  20.                 if(pFile)
  21.                 {
  22.                  ……}
  23.          }
点赞  2008-6-6 08:42
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复