现有一段代码,它会自动检测c:\\test.dat是否存在,如果存在就删除掉它。
WIN32_FIND_DATA wfd;
if (INVALID_HANDLE_VALUE != FindFirstFileW(L"c:\\test.dat", &wfd))
{
DeleteFile(L"c:\\test.dat");}
}现在需要将它修改一下,获取c:\\test.dat的创建时间(文件的修改时间也可以),如果创建时间(与现在的系统时间相比)大于30秒则删除它。请问如何在本例中利用FILETIME ftCreationTime,并与系统时间比较并删除。

解决方案 »

  1.   

    不利用FILETIME ftCreationTime也可以,只要是最精简的代码!
      

  2.   

    GetSystemTime、SystemTimeToFileTime,FILETIME实际上就是8字节整数,精确到100ns,可以强制转换为(ULONGLONG&)来比较。如:
    FILETIME ft1, ft2;if ((ULONGLONG&)ft1 > (ULONGLONG&)ft2+30*10000000)
    {
    }
      

  3.   

    cnzdgs大哥,那可以帮我修改完整吗,我刚学VC6,自己组合都很难,对你来说肯定只是弹指之间(:。
      

  4.   

        WIN32_FIND_DATA wfd; 
    COleDateTime tm;
    CSpanTime time;
    if (INVALID_HANDLE_VALUE != FindFirstFileW(L"c:\\test.dat", &wfd)) 
    {
    tm = COleDateTime::GetCurrentTime(); //获取系统时间
    SystemTimeToFileTime() //将系统时间转换为文件时间,几天语法请查msdn
    time = tm - wfd.ftCreationTime;
    if(time > 30*10000000)
      DeleteFile(L"c:\\test.dat");} 

      

  5.   

    其实都已经说了。
    WIN32_FIND_DATA wfd;
    HANDLE find = FindFirstFileW(L"c:\\test.dat", &wfd);
    if (INVALID_HANDLE_VALUE != find)
    {
    SYSTEMTIME st;
    FILETIME ft;
    GetSystemTime(&st);
    SystemTimeToFileTime(&st, &ft);
    if ((ULONGLONG&)ft > (ULONGLONG&)wfd.ftCreationTime+30*10000000)
    {
    DeleteFile(L"c:\\test.dat");
    }
    FindClose(find);
    }
      

  6.   


    WIN32_FIND_DATA wfd; 
    if (INVALID_HANDLE_VALUE != FindFirstFileW(L"c:\\test.dat", &wfd)) 

        SYSTEMTIME st;
        FILETIME ft;
        GetSystemTime(&st);
        SystemTimeToFileTime(&st, &ft);  
        ULARGE_INTEGER u1,u2;
        u1.LowPart= wfd.ftCreationTime.dwLowDateTime;
        u1.HighPart =wfd.ftCreationTime.dwHighDateTime;    u2.LowPart= ft.dwLowDateTime;
        u2.HighPart =ft.dwHighDateTime;    if((u2-u1)/10000>30)
        DeleteFile(L"c:\\test.dat");} 
      

  7.   

    纳秒,忘了中间还隔个微妙了,单位搞错了
    改为if((u2-u1)/10000000>30)
      

  8.   

    Conry你好,谢谢你的代码,你的
    if((u2-u1)/10000>30)
    DeleteFile(L"c:\\test.dat");} 
    DeleteFile前面少了一个{对吗,但是在我的程序里还报错error C2676: binary '-' : 'union _ULARGE_INTEGER' does not define this operator or a conversion to a type acceptable to the predefined operatorcnzdgs大哥的代码非常好,但可惜就只头一次调用的时候比较准确,30秒才删除,但如果程序多次调用这个模块,就会直接DeleteFile(L"c:\\test.dat"); 非要退出程序,重新打开第一次执行模块代码就删除准确,后来的就即使创建时间不足30秒也删,感觉好象需要在哪里加代码把st和ft内容清空一下,不然会用之前的存的内容?奇怪~