C ++ проверить, если файл пуст - PullRequest
1 голос
/ 02 ноября 2010

У меня есть проект на 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, но это не сработало.

Спасибо,
Ile

Ответы [ 2 ]

6 голосов
/ 02 ноября 2010

Сравнить hFile с HFILE_ERROR (не с NULL!). Кроме того, вы должны изменить OpenFile на CreateFile и вызвать его правильно, OpenFile уже давно устарел. На самом деле MSDN четко заявляет:

Функция OpenFile

Используйте эту функцию только с 16-битным версии Windows. Для новее приложения, используйте CreateFile функция.

Когда вы сделаете это изменение, вы получите РУЧКУ, которую вы должны сравнить с 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);
1 голос
/ 02 ноября 2010

Перед тем, как открыть файл, попробуйте следующее:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...