예제 #1
0
void CTempFiles::DeleteOldTempFiles(LPCTSTR wildCard)
{
	DWORD len = ::GetTempPath(0, nullptr);
	auto path = std::make_unique<TCHAR[]>(len + 100);
	len = ::GetTempPath (len+100, path.get());
	if (len == 0)
		return;

	CSimpleFileFind finder = CSimpleFileFind(path.get(), wildCard);
	FILETIME systime_;
	::GetSystemTimeAsFileTime(&systime_);
	__int64 systime = (__int64)systime_.dwLowDateTime | (__int64)systime_.dwHighDateTime << 32LL;
	while (finder.FindNextFileNoDirectories())
	{
		CString filepath = finder.GetFilePath();

		FILETIME createtime_ = finder.GetCreateTime();
		__int64 createtime = (__int64)createtime_.dwLowDateTime | (__int64)createtime_.dwHighDateTime << 32LL;
		createtime += 864000000000LL;      //only delete files older than a day
		if (createtime < systime)
		{
			::SetFileAttributes(filepath, FILE_ATTRIBUTE_NORMAL);
			::DeleteFile(filepath);
		}
	}
}