Windows API GetOpenFileName无法打开文本输入框
使用VS2022实现文件重命名,选择文件后无法打开新的文本输入框,在ofn.flag字段中已添加OFN_OVERWRITEPROMPT;
OPENFILENAME ow;
char fileName[MAX_PATH] = "";
char fileNew[MAX_PATH] = "";
ZeroMemory(&ow, sizeof(ow));
ow.lStructSize = sizeof(ow);
ow.hwndOwner = NULL;
ow.lpstrFilter = _T("CSV Files (*.csv)\0*.csv\0");
ow.lpstrFile = fileName;
ow.lpstrFileTitle = fileNew;
ow.nMaxFile = MAX_PATH;
ow.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
ow.lpstrDefExt = "";
if (GetOpenFileName(&ow)){
// 用户单击了"确定"按钮,整合新的文件名
std::string newFileName = fileName;
//找到最后一个/,删除原文件名,放置新文件名
newFileName.replace(newFileName.find_last_of("\\") + 1, newFileName.length() - newFileName.find_last_of("\\") - 1, fileNew);
char NewFileName[260];
strcpy(NewFileName, newFileName.c_str());
strcat(NewFileName, ".csv");
if (MoveFile(fileName, NewFileName)){
MessageBox(GetHWnd(), fileNew, "注意,文件重命名成功!", MB_OK);
}
else{
DWORD errorCode = GetLastError();
LPSTR messageBuffer = nullptr;
//各种错误类型
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
// 释放消息缓冲区
LocalFree(messageBuffer);
// 显示错误消息
MessageBox(NULL, message.c_str(), "警告", MB_ICONERROR | MB_OK);
}
}
直接将空的文件名设置为新文件名,没有弹出文本输入框
尝试将新文件名初始化为非空值,文件正常重命名