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