【发布时间】:2014-01-17 00:41:22
【问题描述】:
我正在尝试使用GetFileInformationByHandle() 获取现有文件的信息。我执行所需任务的函数接收LPCTSTR Filename 作为参数。代码如下:
getfileinfo(LPCTSTR Filename)
{
OFSTRUCT oo;
BY_HANDLE_FILE_INFORMATION lpFileInformation;
HFILE hfile=OpenFile((LPCSTR)Filename,&oo,OF_READ);
int err=GetLastError();
GetFileInfomationByHandle((HANDLE)hfile,&lpFileInformation);
}
如果我将Filename 声明为LPCSTR,则上面的代码可以正常工作,但是根据我的函数要求,我在LPCTSTR 中收到文件名,所以如果我使用类型转换,那么openfile() 找不到指定的文件并返回-1 .
如果文件名是LPCTSTR,谁能告诉我如何获取文件信息?或者如何将LPCTSTR 转换为LPCSTR。
为什么这种类型转换不起作用?我相信这应该可行。
【问题讨论】:
-
取消
TCHARs 并使用所有 Windows API 函数的宽字符串版本。 -
这里的问题是 OpenFile 的宽字符串版本不存在。
-
假设您的建筑定义了 UNICODE;您所有的 LPCTSTR 在编译时实际上都是 LPWSTR (WCHAR)。因此,在 LPCTSTR 上转换的 LPCSTR 类型通常会被解释为(由为 LPCSTR 设计的东西)解释为单个 ASCII 字符后跟 0x00 字节。你会度过一段糟糕的时光。
标签: c++ string winapi file-handling