不存在从 "CString" 到 "char *" 的适当转换函数求教解决思路

不存在从 "CString" 到 "char *" 的适当转换函数求教
原来代码里面是COPini::WriteString("配置信息", "厚度", P[0],“setinfo.ini”)
这样可直接在指定目录下生成setinfo.ini配置文件
现在我是想把系统时间作为文件名来保存但是直接这样弄不行,我也查了很多资料有人说用下面这些方法把CString转换为char*
CTime t = CTime::GetCurrentTime();
CString tm = t.Format("'%Y/%m/%d-%H/%M/%S'");
tm =tm + ".ini";
COPini::WriteString("配置信息", "厚度", P[0],tm)//tm的参数类型为char *;

我是想把系统时间作为文件名来保存但是直接这样弄不行,我也查了很多资料有人说用下面这些方法把CString转换为char*

1.传给未分配内存的const char* (LPCTSTR)指针. 
   CString cstr(asdd);
   const char* ch = (LPCTSTR)cstr;
   ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.

2.传给未分配内存的指针.
    CString cstr = "ASDDSD";
    char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
    cstr.ReleaseBuffer();
    //修改ch指向的值等于修改cstr里面的值.
    //PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.

3.第二种用法。把CString 值赋给已分配内存的char *。
    CString cstr1 = "ASDDSD";
    int strLength = cstr1.GetLength() + 1;
    char *pValue = new char[strLength];
    strncpy(pValue, cstr1, strLength);
之后试过转换类型还是不行
CTime t = CTime::GetCurrentTime();
CString tm = t.Format("'%Y/%m/%d-%H/%M/%S'");
tm =tm + ".ini";
CString time(tm);
    char *pvalue =(LPTSTR)(LPCTSTR)tm; 
COPini::WriteString("配置信息", "厚度", P[0],pvalue)

那个大神能帮我解决下
------解决方案--------------------
CTime t = CTime::GetCurrentTime();
char szPath[MAX_PATH] = {0};
StringCchPrintfA(szPath, _countof(szPath), "%04d%02d%02d-%02d%02d%02d", t.GetYear(), t.GetMonth(), t.GetDay(), t.GetHour(), t.GetMinute(), t.GetSecond());
COPini::WriteString("配置信息", "厚度", P[0], szPath)