Для начала мне требуется найти некоторый файл:
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
Комментариев нет:
Отправить комментарий