2017-02-10 5 views
-1

windows C APIを使用して、拡張子が.icoで終わる一時ファイル名を生成したいとします。は、ウィンドウ上に.ico拡張子を持つ一時ファイル名を生成します。

私はGetTempFileNameを使用しようとしましたが、拡張機能を制御できません。

+0

「GetTempFileName」を使用して「.ico」を連結してみませんか? – DyZ

+0

@DYZ:これはなぜ最初の場所で 'GetTempFileName'を使うのか(なぜなら、返されるファイル名はもはやユニークであることが保証されていないからです) – IInspectable

+0

ファイルを後でLoadImageに渡しています。これは拡張子を使用してファイルのフォーマットを決定するようです。そのため、拡張子を '.ico'にする必要があります。 –

答えて

2

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; 
} 
+0

Cの質問へのC++の答え?うーん... – alk

+0

@alk:これは、私が質問に答えることを始めて、答えを公表することの間に変更されたと確信しています。 Cソリューションが必要な場合は、使用するAPI呼び出しを知っている必要があります。 – IInspectable

関連する問題