【发布时间】:2016-05-12 18:42:37
【问题描述】:
我希望能够在我的 Win32 应用程序中打开文件。
我正在使用的方法是从编辑框中检索根路径,例如“C:\MyFolder”(分配给strPathToSource)。然后我想附加另一个字符串,例如"\source\Utilities\File.h" 并将连接的路径存储在新变量strPathToFile中。
所以strPathToFile 应该包含“C:\MyFolder\source\Utilities\File.h”,然后可以使用infile.open(strPathToFile) 打开。
相关代码如下:
ifstream infile;
int bufSize = 1024;
LPTSTR strPathToSource = new TCHAR[bufSize];
GetDlgItemText(hWnd, IDC_MAIN_EDIT_FILEPATH, strPathToSource, bufSize); // Get text from edit box and assign to strPathToSource
const char* strPathToFile = char(strPathToSource) + PATH_TO_FILE;
infile.open(strPathToFile);
if(!infile)
{
log(hWnd, "File.h not found.");
return false;
}
其中PATH_TO_FILE定义为:
const char* PATH_TO_FILE = "\\source\\Utilities\\File.h";
我的问题是它总是注销“File.h not found”。我认为问题在于连接,例如
const char* strPathToFile = char(strPathToSource) + PATH_TO_FILE;
我可以看到strPathToSource 和PATH_TO_FILE 的值是它们应该的值,但是strPathToFile 中的连接结果我相信是一个NULL 值。
【问题讨论】:
-
不要使用
+连接指针,也不要将const char *与LPTSTR混合使用,因为它们是不同的类型。换句话说,您的代码存在两个(或更多)问题,这些问题都不相关,但都可能导致问题。 -
还有——从不强制转换字符串类型。如果编译器抱怨指针不兼容,请not 抛弃该错误。使用正确的字符串类型。
-
在 Windows 上,最好不要使用
std::ifstream。由于缺少构造函数,它被设计破坏了,采用了一个宽字符串。如果您仍想在 Windows 上使用std::ifstream,请考虑使用 Microsoft 的扩展,它提供了一个接受宽字符串的 basic_ifstream c'tor。
标签: c++ file winapi editbox lptstr