我想要选择所有文件名用户。返回字符串的格式如下: 文件夹用户选择了| filename1 | filename2 ......
这是我的代码,用于创建多选对话框,获取选定的文件名,并将它们复制到缓冲区变量。文件名由“|”分隔
HWND hDlg = NULL;
wchar_t* buffer = new wchar_t[32768];
void ShowDialog()
{
OPENFILENAME ofn;
wchar_t szFile[32768];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hDlg;
ofn.lpstrFile = (wchar_t*)szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_EXPLORER;
if(GetOpenFileName(&ofn) == TRUE)
{
if(szFile[ofn.nFileOffset-1] != '\0')
{
wcscpy_s(buffer,sizeof(szFile),szFile);
}
else
{
//Multi-select
wchar_t* p= szFile;
int i =0;
while(*p)
{
wchar_t* temp = new wchar_t[1024];
//Copy p into temp
wcscpy_s(temp,1024,p);
if(i==0)
{
//copy folder name into buffer
wcscpy_s(buffer,1024,temp);
}
else
{
//cat file name with buffer
wcscat_s(buffer,1024,temp);
}
//seperated folder name and files name with "|"
wcscat_s(buffer,2,L"|\0");
i++;
p += lstrlen(p) + 1;
}
}
}
}
当我调试此代码时,运行时错误:“字符串未终止”出现在行代码中:wscat_s(buffer,2,L“| \ 0”);
你能解释一下为什么以及如何解决它。
感谢您的帮助
答案 0 :(得分:2)
wcscat_s
接受缓冲区大小作为第二个参数,而不是附加序列的大小,因此它应该是:
wcscat_s(buffer, 32768, L"|");
代替。您收到此错误,因为当前缓冲区中的前两个字符当然都不是“\ 0”。