我试图在C ++中使用IFileOpenDialog接口选择一个文件,然后将其路径复制到一个字符串中,该字符串将显示在编辑框中。
首先,我将字符串复制到的全局变量定义如下:
String[] formats = new String[] {
"yyyy-MM-dd",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH:mmZ",
"yyyy-MM-dd HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
};
for (String format : formats) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
System.out.format("%30s %s\n", format, sdf.format(new Date(0)));
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.format("%30s %s\n", format, sdf.format(new Date(0)));
}
这是我的OpenDialog功能的代码:
LPCTSTR getFilePath = NULL;
这就是将代码复制到编辑框中的代码,我想要它去:
int CTestClassDlg::OpenDialogBox(){
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOpenDialog *pFileOpen;
// Create the FileOpenDialog object.
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
if (SUCCEEDED(hr))
{
// Show the Open dialog box.
hr = pFileOpen->Show(NULL);
// Get the file name from the dialog box.
if (SUCCEEDED(hr))
{
IShellItem *pItem;
hr = pFileOpen->GetResult(&pItem);
if (SUCCEEDED(hr))
{
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
// Display the file name to the user.
if (SUCCEEDED(hr))
{
getFilePath = pszFilePath; //saves file path to global variable
CoTaskMemFree(pszFilePath);
}
pItem->Release();
}
}
pFileOpen->Release();
}
CoUninitialize();
}
return 0; }
虽然这会将正确的完整路径复制到编辑框中,但它要么完全省略驱动器号,要么只是放置一个看似随机的符号而不是它。
我不知道这个问题的原因是什么,搜索谷歌或在这里也没有带来任何有用的东西。
希望你们可以帮助我,因为我猜想一旦找到错误来源就应该很容易解决。
提前致谢!