码迷,mamicode.com
首页 > Windows程序 > 详细

[软件]_[Windows]_[实用系统工具类]

时间:2015-10-31 11:37:03      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:win32   日期时间   编译时间   系统目录   日期格式化   


场景:

1. Windows软件开发时总是需要格式化时间, 获取软件的copyright时间,获取临时目录, 获取下载目录和AppData目录, 这些方法部分如果不搜索的话MSDN真的很难找.

2. 可跨产品移植.


bas_utility_sys.h:

#ifndef __BAS_UTILITY_SYS_H
#define	__BAS_UTILITY_SYS_H

#include "bas_exp.h"

#include <Windows.h>
#include <stdio.h>
#include <time.h>

class LIB_BASIC BASUtilitySys
{

public:
	//"%Y-%m-%d %H:%M:%S"
	static void TimeFormat( time_t nTime, char *szDst,const char* format );

	static void GetNowDateTime(char *szDst,const char* format);

	static wchar_t* GetCompileYear();

	static wchar_t* GetTempDir();

	static wchar_t* GetDownloadDir();

	static wchar_t* GetAppDataDir();
};

#endif

bas_utility_sys.cpp:


#include "basic/bas_utility_sys.h"

#include <Windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <time.h>
#include <string.h>
#include <string>

//1.localtime 可能会出现崩溃的情况,数值太大或负数或0.
#define _MAX__TIME64_T     0x793406fffi64

static time_t FixupTime64Range(const time_t time)
{
	time_t tmp_time = time;
	if(tmp_time < 0 ||// underflow
		tmp_time > (_MAX__TIME64_T - 14 * 60 * 60)) // overflow
	{
		tmp_time = 0; // reset time to 0
	}
	return tmp_time;
}

void BASUtilitySys::TimeFormat( time_t nTime, char *szDst,const char* format )
{
	struct tm m_tm;
	time_t tt = FixupTime64Range(nTime);
	m_tm = *localtime( &tt );
	strftime(szDst,20,format,&m_tm);
}

void BASUtilitySys::GetNowDateTime(char *szDst,const char* format)
{
	time_t t = time(NULL);
	TimeFormat(t,szDst,format);
}

wchar_t* BASUtilitySys::GetCompileYear()
{
	static const wchar_t* date = _T(__DATE__);
	const wchar_t* last = wcsrchr(date,L‘ ‘);
	std::wstring year(last+1);
	return wcsdup(year.c_str());
}

wchar_t* BASUtilitySys::GetTempDir()
{
	TCHAR lpTempPathBuffer[MAX_PATH];
	DWORD dwRetVal = GetTempPath(MAX_PATH,     // length of the buffer
                             lpTempPathBuffer); // buffer for path
	std::wstring path(lpTempPathBuffer);
	return wcsdup(path.c_str());
}

wchar_t* BASUtilitySys::GetAppDataDir()
{
	wchar_t *szPath = (wchar_t*)malloc(sizeof(wchar_t)*MAX_PATH);
	memset(szPath,0,sizeof(wchar_t)*MAX_PATH);
    if(SUCCEEDED(SHGetFolderPath(NULL, 
                               CSIDL_APPDATA|CSIDL_FLAG_CREATE, 
                               NULL, 
                               0, 
                               szPath)))
	{
		szPath[wcslen(szPath)] = L‘\\‘;
		return szPath;
	}else
	{
		return GetTempDir();
	}
}

wchar_t* BASUtilitySys::GetDownloadDir()
{
	wchar_t szPath[MAX_PATH] ;
    if(SUCCEEDED(SHGetFolderPath(NULL, 
                               CSIDL_PROFILE|CSIDL_FLAG_CREATE, 
                               NULL, 
                               0, 
                               szPath)))
    {
		std::wstring path(szPath);
		path.append(L"\\Downloads");
		if(_waccess(path.c_str(),0) == 0)
		{
			path.append(L"\\");
			return wcsdup(path.c_str());
		}else
		{
			BOOL res = CreateDirectory(path.c_str(),NULL);
			if(res)
			{
				path.append(L"\\");
				return wcsdup(path.c_str());
			}else
			{
				return GetTempDir(); 
			}
		}
    }
	return GetTempDir();
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

[软件]_[Windows]_[实用系统工具类]

标签:win32   日期时间   编译时间   系统目录   日期格式化   

原文地址:http://blog.csdn.net/infoworld/article/details/49530723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!