C++ ( MS V S ) 获取打开文件名
C++ ( MS V S ) GetOpenFileName
我的程序旨在让用户打开2个文件,然后以特定方式比较它们。我正在使用Visual Studio在C++中使用GUI创建它(如果这不是最好的方法,请纠正我,我只知道如何在Linux上编写C代码):
OPENFILENAME open;
ZeroMemory(&open, sizeof(open));
open.lStructSize = sizeof(LPOPENFILENAMEA);
open.lpstrFilter = "Files *.csv;*.xls ";
open.nFileOffset = 1;
open.lpstrFile[0] = ' ';
open.nMaxFile = 2048;
open.lpstrTitle = "Title here.";
open.Flags = OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST;
BOOL selected = GetOpenFileName(&open);
我收到以下编译器错误:
E0513 不能将"const char *"类型的值分配给类型为"LPCWSTR"的实体 错误 C2440 '=': 无法从 'const char [39]' 转换为 'LPCWSTR' Newtry
在filter
行和title
行上。
由于Windows95/98/ME早已消亡,目前的建议是使用Windows NT系列操作系统的本机Unicode支持。
显然,您已经进行了该设置,因为错误消息告诉我们GetOpenFileName
被定义为GetOpenFileNameW
.在 WIndows 95 上,它被定义为GetOpenFileNameA
.A
变体意味着它需要const char*
参数,W
变体需要const wchar_t*
。
您可以使用L
前缀定义wchar_t
宽字符串文本,即L"Files..."
.你也可以使用std::wstring
,它c_str()
方法返回一个以null结尾的const wchar_t*
。
看起来你正在做一个 unicode 构建。
如果您查看字符串结构成员上 one 的定义,例如lpstrFilter
,您会发现它被定义为LPTSTR
。第一个T
表示文本类型为 ASCII 或 Unicode,具体取决于您的构建方式。
若要处理这两种情况,请在输入字符串文本时使用_T
宏:
open.lpstrFilter = _T("Files *.csv;*.xls ");
这将在非 Unicode 构建上为您提供一个 ASCII 字符串,在 Unicode 构建上为您提供一个 Unicode 字符串。
如果你只希望以Unicode为目标,那么你可以通过在字符串前面加上L
来显式获取Unicode字符串:
open.lpstrFilter = L"Files *.csv;*.xls ";
Microsoft其 Unicode 编程摘要页面上的详细信息。
- 从 Makefile 中的 $@ 获取文件名
- 有没有一种简单的方法可以从 c++ 中的路径获取文件名?
- 从 SetClipboardData 挂钩获取文件名
- 是否有一种便携式/标准的方法可以在堆栈跟踪中获取文件名和亚麻布
- 如何从文件夹中获取文件名,并将它们添加到QT中的孩子中
- 从 Windows 上的 tmpfile() 获取文件名
- 是否可以从FSEvent id获取文件名
- 如何在单击mfc代码中的关系文件时获取文件名
- 如何在Qt中获取文件名
- 是否有一个WinAPI可以从带有可选空格和其他参数的命令行获取文件名
- 从控制台应用中的命令行参数获取文件名C++
- 从流中获取文件名(或路径)
- 如何在下载文件之前获取文件名
- 在调用函数的任何位置获取文件名和函数名
- 在c++ boost库中使用directory_iterator列出和获取文件名的问题
- 从路径中获取文件名
- gtkmm 和 FileChooserButton 无法获取文件名
- 如何从http请求体字符串获取文件名
- 如何在GNU Makefile中只获取文件名而不扩展名
- 如何从argv中获取文件名并将其与ifstream一起使用/将其更改为ofstream的txt