Страницы

Поиск по вопросам

пятница, 11 января 2019 г.

Ошибка 6 (неверный дескриптор) - в чём причина?

Для начала мне требуется найти некоторый файл:
HANDLE hExample4; HANDLE hExample24; WIN32_FIND_DATA fd; hExample4 = FindFirstFile("Example4.bin",&fd); hExample24 = FindFirstFile("Example24.bin",&fd);
Так вот, после того, как я начинаю работать с этими дескрипторами, вызов любой функции типа SetEndOfFile(), GetFileSize() и т. д. выдаёт ошибку, а при вызове GetLastError() можно увидеть, что это ошибка 6 (неверный дескриптор).
Что тут не так?


Ответ

FindFirstFile возвращает дескриптор поиска(не тот дескриптор, который создается при открытии файла с помощью функции CreateFile, назовем его файловый дескриптор). Поэтому вы его не можете использовать в функциях для работы с файлами типа SetEndOfFile, GetFileSize. Дескриптор поиска вы можете использовать только для дальнейшего поиска других файлов с помощью функции FindNextFile
Когда дескриптор поиска больше не нужен, вы его должны закрыть с помощью функции FindClose, именно с помощью этой функции, а не с помощью функции CloseHandle, который мы закрываем файловый дескриптор, когда создаем его с помощью функции CreateFile
Поэтому если вы нашли этот файл, то для получения файлового дескриптора вызовите функцию CreateFile с флагом OPEN_EXISTING, если вам он действительно нужен.
P.S Функция FindFirstFile возвращает структуру LPWIN32_FIND_DATA, из которой вы можете получить размер файла во так
LARGE_INTEGER filesize; filesize.LowPart = fd.nFileSizeLow; filesize.HighPart = fd.nFileSizeHigh; _tprintf(TEXT(" %s %ld bytes
"), fd.cFileName, filesize.QuadPart);
FindFirstFile Function Listing the Files in Directory Example

Комментариев нет:

Отправить комментарий