Единственными причинами, по которым вы хотите использовать 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;
}
Почему бы не использовать 'GetTempFileName', а затем сцепить' «.ico» 'к нему? – DyZ
@DYZ: Потому что это ломается, почему вы сначала используете 'GetTempFileName' (т. Е. Имя возвращаемого файла больше не будет гарантировано уникальным). – IInspectable
Я передаю файл позже LoadImage, который, как представляется, использует расширение, чтобы определить, в каком формате находится файл. Вот почему мне нужно расширение, которое будет '.ico'. –