GetTempFileName, кажется, не работает в Windows 10

У меня есть программа MFC, которая использует GetTempFileName, В Windows 7 он работает правильно, однако, когда я беру тот же код в Windows 10, он производит мусор.

TCHAR temp_dir[1024];
GetTempPath(1024,temp_dir);
TCHAR temp_file[1024];
GetTempFileName("C:\\","udb",0,temp_file);
std::cout << "Temp DB Path: " << temp_file << std::endl;

В Windows7:

Temp DB Path: C:\udb2145.tmp

В Windows10:

Temp DB Path: o▒

Я делаю что-то не так в своем коде? Или я должен использовать другую функцию?

0

Решение

Ну, во-первых, когда я тестировал ваш пример, GetTempFileName возвращает 0, что означает, что он обнаружил ошибку (возвращаемое значение для успеха — ненулевой идентификатор временного файла). GetLastError возвращает -5, что означает: «Доступ запрещен», и я очень сомневаюсь, что неадминистративные приложения могут писать в «C: \» (по крайней мере, в Windows 8+).

Значения мусора, которые вы видите и которые печатаются, связаны с тем, что вы не инициализировали свой массив temp_file. Вы должны сделать это так:

TCHAR temp_file[1024] = {0};

И, чтобы ваш код работал, сохраните временный файл в фактической временной папке:

GetTempFileName(temp_dir,"udb",0,temp_file);

РЕДАКТИРОВАТЬ: И, как уже отмечал один из комментаторов, если ваш код использует Unicode, вам потребуется wcout для правильного вывода имени файла. В противном случае вы увидите только первый символ пути к файлу. Но это повлияет на вывод на консоль.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]