void CDejobDlg::OnOK() 
{    UpdateData(TRUE);  int buf2[512],tcd,tcd1,*p1,i;
  
  CFile cfile1;
  
  char*pfilename=new char[512];
  
  strcpy(pfilename, (LPCSTR)m_chrFile);
  
  cfile1.Open(pfilename,CFile::modeReadWrite);
  
  cfile1.Read(buf2,32);
  
  p1=(int*)buf2;
  
  p1=p1+1;
  
  tcd=*p1;
  
  tcd1=(tcd-1)/2;
  
  cfile1.SeekToBegin();
  
  cfile1.Read(buf2,tcd);
  
  buf2[0]=buf2[0]+0x0017;
  
  for(i=16;i<tcd1;i++)   buf2[i]=buf2[i]^0xffff;
  
  cfile1.SeekToBegin();
  
  cfile1.Write(buf2,tcd);
  
  cfile1.Flush();
  
  cfile1.Close();
 
 if (CanExit())
 CDialog::OnOK();   
}void CDejobDlg::OnYes() 
{  
if(m_chrPsn=="qilinyi" && m_chrPsw=="8300302"){
    

int buf2[512],tcd,tcd1,*p1,i;  CFile cfile1;  char*pfilename=new char[512];
  
  strcpy(pfilename, (LPCSTR)m_chrFile);
  
  cfile1.Open(pfilename,CFile::modeReadWrite);
  
  cfile1.Read(buf2,32);
  
  p1=(int*)buf2;
  
  p1=p1+1;
  
  tcd=*p1;
  
  tcd1=(tcd-1)/2;
  
  cfile1.SeekToBegin();
  
  cfile1.Read(buf2,tcd);
  
  buf2[0]=buf2[0]-0x0017;
  
  for(i=16;i<tcd1;i++)   buf2[i]=buf2[i]^0xffff;;
  
  cfile1.SeekToBegin();
  
  cfile1.Write(buf2,tcd);
  
  cfile1.Flush();
  
  cfile1.Close();}        
        else {
  AfxMessageBox("无权打开文件");
  return;
  x++; 
if (x>=3) {DeleteFile(m_chrFile);
      AfxMessageBox("文件被销毁");
  return;
exit(1);}
         else CDejobDlg::OnYes();
// TODO: Add your control notification handler code here
  }
}
这是一个加密控件和一个解密控件的代码  我在加密是程序报错~
谁能帮我看下是什么问题~
我是个菜鸟请各位大侠以后多帮忙

解决方案 »

  1.   

    CSDN不支持贴代码,看代码头晕。调试才是硬道理!
      

  2.   

    弹错的对话框错误是这个Debug Assertion Failed!Program:D:\myjob\MSDev98\MyProjects\dejob\Debug\dejob.exe
    File:filecore.cpp
    Line:220For information on how your program can cause an assertion
    filelure, see the Visul C++ documentation on asserts(Press Retry to debug the application)
      

  3.   

    assert宏错误,单步调试跟踪一下
    检查一下指针等是否正确操作
      

  4.   

    看看你的文件在不在,文件路径对不对,文件属性是不是只读。你m_chrFile里放的是什么?看你好象没updatedata就用m_chrFile了啊。
      

  5.   

    m_chrFile 里的是文件路径是一个编辑框的变量  IDC_EDIT3   CString    m_chrFile文件路径没错啊~也用了updatedata
      

  6.   

    原因是你的文件没打开,为什么没打开我没有你的环境也不知道。看看你的文件在不在,文件属性是不是只读。
    或者你这么写:
    CFileException ex;   if (!cfile1.Open(pfilename,CFile::modeReadWrite, &ex))
       {      TCHAR szError[1024];
          ex.GetErrorMessage(szError, 1024);
          MessageBox(szError);
          return;
       }
    看看打出来什么。
      

  7.   

    那你先单步调一下,看看是在哪句cfile1.Read的时候出错的。
      

  8.   

    唉~~郁闷死了~单步调试时搞不懂具体错在哪~~错误多是这个   Access  Violation
      

  9.   

    你的代码好象有问题,我估计是第二个read出的问题:
    p1=(int*)buf2;
      
      p1=p1+1;
      
      tcd=*p1;
      
      tcd1=(tcd-1)/2;
    你那个tcd的值是什么?
      

  10.   

    你调调看啊,单步走,如果这个tcd很大的话,cfile1.Read(buf2,tcd)肯定是不行的。
    tcd=*p1;这个p1本身就不知道是什么,这么取岂不是很危险。
      

  11.   

    你把例子都发给我。
    加密算法的说明也给我。
    [email protected]
      

  12.   

    把完整的工程代码发过来,我们帮你看看。[email protected][email protected]
      

  13.   

    是啊~有个编辑框输入文件名和路径啊~ 就是那个m_chrFile
      

  14.   

    你这个程序是哪里来的啊?
    从文件里读出开头4个字节的内容,然后以这四个字节+1的值作为地址,把该地址的内容再给tcd。
    这一步就不合理,这个地址是什么都不知道,不能这么写的。
    是不是你把程序弄错了?
      

  15.   

    void CDejobDlg::OnOK() 
    {     UpdateData(TRUE);
    CFile cfile1;  
    if(!cfile1.Open(m_chrFile,CFile::modeReadWrite))
    {
    return;
    }
    int length = cfile1.GetLength();
    char *buf = new char[length +1];
    if(!buf)
    {
    cfile1.Close();
    return;
    }cfile1.Read(buf,length);
    for(int i = 0;i<length;i++)
    {
    *(buf+i) = *(buf+i) ^ 0x32;
    }cfile1.SeekToBegin();cfile1.Write(buf,length);cfile1.Flush();cfile1.Close();
    delete []buf;  
    CDialog::OnOK();   
    }你用这个代码吧,简单加密,解密过程和加密一样的。