C++检查文件是否为空
我得到了一个需要编辑的C++项目。这是变量声明:C++检查文件是否为空
// Attachment
OFSTRUCT ofstruct;
HFILE hFile = OpenFile(mmsHandle->hTemporalFileName , &ofstruct , OF_READ);
DWORD hFileSize = GetFileSize((HANDLE) hFile , NULL);
LPSTR hFileBuffer = (LPSTR)GlobalAlloc(GPTR, sizeof(CHAR) * hFileSize);
DWORD hFileSizeReaded = 0;
ReadFile((HANDLE) hFile , hFileBuffer, hFileSize, &hFileSizeReaded, NULL);
CloseHandle((HANDLE) hFile);
我需要检查,如果该文件附后(我想我需要检查是否有HFILE任何值),但不知道怎么办。我尝试了hFile == NULL
,但这并不能完成这项工作。
感谢,
岛
比较HFILE与HFILE_ERROR(不带NULL!)。此外,您应该将OpenFile更改为CreateFile并正确调用,OpenFile早已弃用。事实上MSDN中明确指出:
的OpenFile功能
只能使用此功能与16位 版本的Windows。对于较新的 应用程序,请使用CreateFile 函数。
当您进行此更改时,您将收到一个HANDLE,您应该将其与INVALID_HANDLE_VALUE进行比较。
更新:正确的方式来获得文件的大小:你打开,你可以试试这个文件之前
LARGE_INTEGER fileSize={0};
// You may want to use a security descriptor, tweak file sharing, etc...
// But this is a boiler plate file open
HANDLE hFile=CreateFile(mmsHandle->hTemporalFileName,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE && GetFileSizeEx(hFile,&fileSize) &&
fileSize.QuadPart!=0)
{
// The file has size
}
else
{
// The file is missing or size==0 (or an error occurred getting its size)
}
// Do whatever else and don't forget to close the file handle when done!
if (hFile!=INVALID_HANDLE_VALUE)
CloseHandle(hFile);
:
WIN32_FIND_DATA wfd;
HANDLE h = FindFirstFile(filename, &wfd);
if (h != INVALID_FILE_HANDLE)
{
// file exists
if (wfd.nFileSizeHigh != 0 || wfd.nFileSizeLow != 0)
{
// file is not empty
}
FindClose(h)
}
这可能无法正常工作,因为通常情况下,文件正被写入其元数据中,包括其文件长度未更新。这就是为什么当你查看他们的目录时你会看到大小为零的工作文件。您必须“触摸”文件(例如通过阅读文件)来更新文件长度。 – 2010-11-02 16:12:12
从MSDN:注意:在极少数情况下,在调用此函数(FindFirstFile)时,NTFS文件系统上的文件信息可能不是最新的。要确保获取当前文件信息,请调用GetFileInformationByHandle函数。 @ http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx – 2010-11-02 16:19:36
@迈克尔,感谢您的注意。如果我理解正确,那么当文件不存在时,文件可能会显示为空,但不是相反的方式? – 2010-11-02 16:27:40
是有使用HFILE_ERROR的任何例子吗? Thx – 2010-11-02 14:07:23
嗯,它看起来像我从来没有得到错误...也许这是因为程序自动创建一个空文件。你知道如何检查'DWORD hFileSize'值是什么,并将其与某些东西进行比较? – 2010-11-02 14:32:50
你想测试文件是否存在或获取其长度?我无法完全理解你的目标。 – 2010-11-02 14:51:10