我正在尝试使用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。如果filename是
LPCTSTR
,谁能告诉我如何获取文件信息?或如何将LPCTSTR
转换为LPCSTR
。为什么此类型转换不起作用?我相信这应该有用。
最佳答案
解决您当前问题的方法是将OpenFile()
替换为CreateFile()
,就像OpenFile()
documentation所说的那样:
注意此功能功能有限,不建议使用。对于新的应用程序开发,请使用CreateFile函数。
例如:
getfileinfo(LPCTSTR Filename)
{
HANDLE hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
int err = GetLastError();
// handle error as needed ...
}
else
{
BY_HANDLE_FILE_INFORMATION FileInfo = {0};
BOOL ok = GetFileInformationByHandle(hFile, &FileInfo);
int err = GetLastError();
CloseHandle(hFile);
if (!ok)
{
// handle error as needed ...
}
else
{
// use FileInfo as needed...
}
}
}
话虽这么说,更好的解决方案是根本不打开文件。可以使用
GetFileInformationByHandle()
代替获取FindFirstFile()
返回的大多数信息:getfileinfo(LPCTSTR Filename)
{
WIN32_FIND_DATA FileData = {0};
HANDLE hFile = FindFirstFile(Filename, &FileData);
if (hFile == INVALID_HANDLE_VALUE)
{
int err = GetLastError();
// handle error as needed ...
}
else
{
FindClose(hFile);
// use FileData as needed ...
}
}