cfile类能打开二进制文件吗?若能的话,其第二个参数似乎也有问题,我记不清了。建议查查类参考。

解决方案 »

  1.   

    当然可以了,CFile::modeRead|CFile::modtypeBinary作为参数
      

  2.   

    to supperapplication:
    我用CFile::modeRead¦CFile::typeBinary试过了,还是打不开,返回结果和上面一样。天那,这是为什么呀!
      

  3.   

    我把文件的创建和操作都贴上吧!请大家指导!
    我创建文件如下:
    CFile fs;
    if (!fs.Open ("filename.mpg", CFile::modeNoTruncate| CFile::modeWrite))
    {
       fs.Open ("filename.mpg", CFile::modeWrite | CFile::modeCreate);
    }
    fs.Write(header,nLen);
    fs.Close();
    之后多次操作文件:
    CFile fs;
    if (!fs.Open ("filename.mpg",CFile::modeNoTruncate| CFile::modeWrite|CFile::shareDenyRead))
    {
        fs.Open ("filename.mpg",CFile::modeWrite | CFile::modeCreate |CFile::shareDenyRead);
    }
    fs.Seek (0, CFile::end);
    fs.Write (Buf, REALBUFLEN);
    fs.Close ();事后我想打开硬盘上的filename.mpg,打不开文件,用容量为220M和2M的文件都试过,fs.Open的参数nOpenFlags为modeReadWrite或modeRead 和typeBinary也都试过,以上情况下fs.Open后CFileException都返回错误码11,即sharingViolation,什么原因?
    void CTstDlg::OnChangeFile() 
    {
    CFile fs;
    CFileException e;
    if (!fs.Open ("filename.mpg", CFile::modeRead | CFile::typeBinary,&e))
            {
    int a=e.m_cause;   
    }
    fs.SeekToBegin();
    fs.SetLength(fs.GetLength() - 30000);
            fs.Close ();
    }