windows C APIを使用して、拡張子が.ico
で終わる一時ファイル名を生成したいとします。は、ウィンドウ上に.ico拡張子を持つ一時ファイル名を生成します。
私はGetTempFileNameを使用しようとしましたが、拡張機能を制御できません。
windows C APIを使用して、拡張子が.ico
で終わる一時ファイル名を生成したいとします。は、ウィンドウ上に.ico拡張子を持つ一時ファイル名を生成します。
私はGetTempFileNameを使用しようとしましたが、拡張機能を制御できません。
GetTempFileNameを使用する理由は、一意のファイル名を生成するためです。任意の拡張子を付けることでその不変式が破られるため、解はありません。
したがって、固有のファイル名を生成するソリューションが必要です。
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;
}
Cの質問へのC++の答え?うーん... – alk
@alk:これは、私が質問に答えることを始めて、答えを公表することの間に変更されたと確信しています。 Cソリューションが必要な場合は、使用するAPI呼び出しを知っている必要があります。 – IInspectable
「GetTempFileName」を使用して「.ico」を連結してみませんか? – DyZ
@DYZ:これはなぜ最初の場所で 'GetTempFileName'を使うのか(なぜなら、返されるファイル名はもはやユニークであることが保証されていないからです) – IInspectable
ファイルを後でLoadImageに渡しています。これは拡張子を使用してファイルのフォーマットを決定するようです。そのため、拡張子を '.ico'にする必要があります。 –