在Windows上生成带.ico扩展名的临时文件名

时间:2017-02-10 19:17:21

标签: c winapi

我希望使用windows C API生成一个以扩展名.ico结尾的临时文件名。

我尝试过使用GetTempFileName但是我无法控制扩展名。

1 个答案:

答案 0 :(得分:2)

您想要使用GetTempFileName的唯一原因是,因为它可以保证生成唯一的文件名。附加任意扩展会破坏该不变量,因此这不是解决方案。

因此,您需要一个能够生成唯一文件名的解决方案。使用GUID的字符串表示是获得它的常用方法:

std::wstring GetUniqueFileName( const std::wstring& extension = std::wstring() ) {
    GUID guid{ 0 };
    _com_util::CheckError( ::CoCreateGuid( &guid ) );
    wchar_t buffer[39];
    if ( !::StringFromGUID2( guid, buffer, sizeof( buffer ) / sizeof( *buffer ) ) ) {
        throw std::runtime_error( "StringFromGUID2() failed." );
    }
    std::wstring retVal{ buffer };
    retVal += extension;
    return retVal;
}