在WINCE下,用嵌入式VC编写 (其实跟VC一样)
 
 程序是这样的,程序一开始,首先统计我的一个文件夹里有多少个文本,然后把统计数字赋给monitorcount,这个全局变量;
 
 然后打开当天的文本,开始记录数据,若没有当天的文本就新建一个,然后进行记录,同时monitorcount自加1; 然后系统初始化过程结束. 记录继续运行时,当过了晚上0点,则关闭文本,判断monitorcount是否大于30,如果大于30就开始执行删除文本操作, 这个删除操作,首先是调用一个函数,这个函数的作用是开启删除线程.删除线程开始比较各个文本的创建时间,然后删除30天 以前那个!(保证文本个数为30天) 删除完了以后monitorcount自减1. 曾经有一次,不能进行删除,发现问题是没有进行事件同步,加了事件同步以后,模拟日期变换,可以删除! 后来就一直运行,由于我事先预备好了超过30个文本,所以开始测试以后,就直接过一天,关一个,删一个,然后在新建一个.
 
 正常运行了14天,到了第15天,关闭上一天的文本,新建文本成功,但是删除文本没成功,不知道是什么原因! 重起后,就又好了! 

解决方案 »

  1.   

     代码:   初始化:int monitorcount=0;//计算有多少个记录的文本
         
         find=FindFirstFile(_T("\\harddisk2\\monitorrecord\\*.TXT"),&FileData); 
    if(find!=INVALID_HANDLE_VALUE)
    {

     ret=true;
    }
        
        while(ret)   
    {   
         ret= FindNextFile(find,&FileData);     
         monitorcount++;                                            
    }  //统计有多少记录文本     if(!FindClose(find))
    {
       //  printf("关闭查找句柄失败");
    } m_hSynEvent7 = CreateEvent(NULL,false,false,NULL); //删除线程,事件同步 平常运行部分:
     do {       
               time=CTime::GetCurrentTime();           day=time.GetDay();
              if (tempday!=day) //tempday存储上一天的日期,如果到了第二天,则关闭上一天文本
      {
      
               tempday=day;
            
             CloseHandle(hfile)
                  
    }
      
              if(monitorcount>30)   // 判断是否大于30,若大于执行删除操作~删除完monitorcount
                        自己减少1
      {
         function3();
      }
          ......后续创建文本,然后onitorcount自加1! void function3()
    {

       handle7 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc7,NULL,0,&dwThreadId7);
                if(handle7)
    {
    // printf("线程3创建成功\n");
       SetEvent(m_hSynEvent7);
    }
    }
    void ThreadProc7()
         
    {
    HANDLE find; char bufkongge[4];
    strcpy(bufkongge,"\r\n");
    WIN32_FIND_DATA FileData;
        CString name1,name2;
        FILETIME filetime1;
    FILETIME filetime2;
    FILETIME filetimecompare;
    bool ret;   TCHAR wenjianming[MAX_PATH];
    TCHAR lujing[]=_T("\\harddisk2\\monitorrecord\\");   if (WaitForSingleObject(m_hSynEvent7,INFINITE)==WAIT_OBJECT_0)
       {
            find=FindFirstFile(_T("\\harddisk2\\monitorrecord\\*.TXT"),&FileData);  
      filetime1=FileData.ftCreationTime;
     filetimecompare=filetime1;
                 name1=FileData.cFileName;
                
     if(find!=INVALID_HANDLE_VALUE)
     {
                        
    ret=true;
     }              while(ret==true)   
      {   
                      ret= FindNextFile(find,&FileData); 
     if(ret==true)
     {
      filetime2=FileData.ftCreationTime;
              name2=FileData.cFileName;
                     
             if(filetimecompare.dwHighDateTime<filetime2.dwHighDateTime)//说明FILETIMEcompare比FILETIME2早
     {
             
                          continue;
     }
     else
          
      {
                      
                        filetimecompare=filetime2;
                name1=name2;
      }
                    
       }  
      }
                    if(!FindClose(find))
    {
             
    }
                  //  FindClose(find);
                    lstrcpy(wenjianming,lujing);
    lstrcat(wenjianming,name1);
      
    if(DeleteFile(wenjianming))//删除一个文件,以覆盖空间
       {
    //    printf("删除监控记录文件成功\n");
       }
      
     monitorcount--;
       }
    }请大家帮忙看看,一般重起就正常了,过了十几天就不行了!
      
      
      

  2.   

    同意1楼的说法,把控制时间改成秒来处理调试删除不掉是不是还在调用该file handle?close handle( CloseHandle(hfile) )有没有成功?
      

  3.   


     删除的是30天前的文本,我想30天以前的文本,我只是获取建立时间,比较时间,把时间早的找到然后删除。
     
     关于加锁,我发现,现在关闭上一天的文本,总是能成功的!我对程序做如下改动不知道可否,就是如果关闭文本 成功了,发出信号,然后在执行删除操作。写操作是在写当前的文本,但是删除也只是删除30天前的旧文本。 do {      
              time=CTime::GetCurrentTime(); 
              BOOL  yunxushanchu=FALSE; //允许删除信号           day=time.GetDay(); 
              if (tempday!=day) //tempday存储上一天的日期,如果到了第二天,则关闭上一天文本 
      { 
      
              tempday=day; 
            
             CloseHandle(hfile)                yunxushanchu=true; //若关闭成功,则允许执行删除操作              

      if (yunxushanchu=true)
              if(monitorcount>30)  // 判断是否大于30,若大于执行删除操作~删除完monitorcount 
                        自己减少1 
      { 
        function3(); 
      } 
       }   
        ......后续创建文本,然后monitorcount自加1!