erzeugen Ich möchte einen temporären Dateinamen, der mit der Erweiterung .ico
mit der Windows-C-API endet.temporäre Dateinamen mit .ico Erweiterung auf Windows
Ich habe GetTempFileName versucht, aber dann kann ich die Erweiterung nicht steuern.
erzeugen Ich möchte einen temporären Dateinamen, der mit der Erweiterung .ico
mit der Windows-C-API endet.temporäre Dateinamen mit .ico Erweiterung auf Windows
Ich habe GetTempFileName versucht, aber dann kann ich die Erweiterung nicht steuern.
Die einzigen Gründe, warum Sie GetTempFileName verwenden möchten, ist, weil es garantiert, einen eindeutigen Dateinamen zu erzeugen. Das Anhängen einer beliebigen Erweiterung bricht diese Invariante, so dass dies keine Lösung ist.
Sie benötigen also eine Lösung, die einen eindeutigen Dateinamen erzeugt. Mit Hilfe der String-Darstellung eines GUID ist ein gemeinsamer Weg, dass zu bekommen:
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;
}
Eine C++ Antwort auf eine C Frage? Hmm ... – alk
@alk: Ich bin mir ziemlich sicher, dass sich das geändert hat, als ich anfing, die Frage zu beantworten und die Antwort zu veröffentlichen. Wenn Sie eine C-Lösung benötigen, wissen Sie, welche API-Aufrufe verwendet werden sollen. – IInspectable
Warum nicht 'GetTempFileName' und dann verketten' „ICO“ ', um es? – DyZ
@ DYZ: Weil das bricht, warum Sie "GetTempFileName" an erster Stelle verwenden (d. H. Der zurückgegebene Dateiname ist nicht länger garantiert eindeutig). – IInspectable
Ich übergebe die Datei später an LoadImage, die die Erweiterung zu verwenden scheint, um zu entscheiden, in welchem Format die Datei ist. Deshalb brauche ich die Erweiterung ".ico". –