to cafecai:
   我有KillTimer(),应该不是这个问题

解决方案 »

  1.   

    补充说明:
     srcFile是要检查的文件tmpFile是个临时文件(用于比较)
      

  2.   

    在while前加上srcFile.SeekToBegin();tmpFile.SeekToBegin();
    另外建议你不要使用tmpFile,而直接使用一大块动态分配的内存,z_hq.dbf才几百K吗,使用临时文件太慢了,股民会着急的。
      

  3.   

    to cchuocp:
    谢谢提示!不过我加了这两句还是老样子?我刚好在写一个小小的行情监控程序,还可能有其他什么原因呢?
      

  4.   

    try:void CTestDlg::OnTimer(UINT nIDEvent) 
    {
        srcFile.SeekToBegin();
        tmpFile.SeekToBegin();
        DWORD dwLength = srcFile.GetLength();
        byt   src[1024];
        byte  tmp[1024];
        BOOL bSame = true;
        while( dwLength )
        {
            UINT dwSrc=srcFile.Read(src,1024);
            UINT dwTmp=tmpFile.Read(tmp,1024);
            if ( dwSrc != dwTmp )
            {
                bSame = false;
                break;
            }
            if ( dwSrc == 0 )
                break;
            dwLength -= dwSrc;
            if(memcmp(tmp,src,dwSrc)!=0)
            {
                bSame = false;
                break;
             }
        }   if ( !bSame )
       {
           tmpFile.Close();
           CopyFile("f:\\z_hq.dbf","f:\\gga.dbf",false);
           tmpFile.Open("f:\\gga.dbf", CFile::modeRead);
       }
    }        
      

  5.   

    补充一下:srcFile.Open("f:\\z_hq.dbf", CFile::modeRead|CFile::shareDenyNone, NULL);
                                          -------------------------------------
      

  6.   

    我估计你的tmpFile就是f:\\gga.dbf,CopyFile使用一个打开的文件可能有问题。
    析构函数中打开文件!!!,构造函数吧!
      

  7.   

    我构造函数的代码如下:
    srcFile.Open("f:\\z_hq.dbf",CFile::modeRead|CFile::shareDenyNone|CFile::typeBinary);
    if(!CopyFile("f:\\z_hq.dbf","f:\\gga.dbf",false))
    MessageBox("Copy file failed!");
    tmpFile.Open("f:\\gga.dbf",CFile::modeReadWrite|CFile::typeBinary);
    SetTimer(1,18000,NULL);
      

  8.   

    把你的project发给我,帮你调一下。
    [email protected]
      

  9.   

    163一直连不上,不过我工程里已没有别的东西了,我写的代码已经全部贴出来了,就这一点刚开始测试,会不会CopyFile后再用Open打开有问题
      

  10.   

    试一下不用CopyFile的程序,不输入错误肯定没问题,最后把tmp改称类成员,在析构函数中释放就行了。void CTestDlg::OnTimer(UINT nIDEvent) 
    {
        static byte *tmp = NULL;
        static DWORD dwTempLen = 0;
        bool bSame;    
        srcFile.SeekToBegin();
        if ( srcFile.GetLength() != dwTempLen )
        {
            dwTempLen = srcFile.GetLength();
            bSame = false;
            delete[] tmp;
            tmp = new byte[dwTempLen];
            srcFile.Read( tmp, dwTempLen );
        }
        else if ( dwTempLen > 0 )
        {
            byte *src = new byte[dwTempLen];
            srcFile.Read( src, dwTempLen );
            if ( memcmp( src, tmp, dwTempLen )  == 0 )
                bSame = true;
            else
            {
                memcpy( tmp, src, dwTempLen );
                bSame = false;
            }
         }
    }        
      

  11.   

    up,需要加一个delete src. 如下:
            else
            {
                memcpy( tmp, src, dwTempLen );
                bSame = false;
            }
            delete[] src;  // this line is new added.
      

  12.   

    在我的OnTimer函数中还有下面几句:
             CTime t;
    t.GetCurrentTime();

    if((bSame&&((t.GetHour())<=11)&&((t.GetMinute())<30))||(bSame&&((t.GetHour())>=13)))
    {
    MessageBox("郭光安,行情可能出问题了!");
    Beep(1,3);
    }
    我发现是不是这几行有问题
      

  13.   

    t = CTime::GetCurrentTime();
    GetCurrentTime()是一个静态函数!!!!!!!!!!!!!