Скорее всего, вы столкнетесь с тем, что FDICopy читает только ту кабину, в которую вы проехали. Она будет использовать fdintNEXT_CABINET
для получения составных данных для любых файлов, которые вы извлекаете в ответ на fdintCOPY_FILE
, но он вызывает fdintCOPY_FILE
только для файлов, которые запускаются в этой первой кабине.
Чтобы получить список каталогов для всего набора, вам нужно вызвать FDICopy в цикле. Каждый раз, когда вы получаете событие fdintCABINET_INFO
, сохраняйте параметр psz1
(имя следующей кабины). Когда FDICopy вернется, проверьте это. Если это пустая строка, все готово, если нет, снова вызовите FDICopy со следующей кабиной в качестве нового пути.
fdintCABINET_INFO : единственная ответственность за это - возврат 0 для продолжения обработки. Вы можете использовать предоставленную информацию (путь к следующему шкафу, следующий диск, имя пути, идентификатор набора), но вам это не нужно.
fdintPARTIAL_FILE : В зависимости от того, как вы обрабатываете свои кабины, вы, вероятно, можете это игнорировать. Вы увидите его только для второго и более поздних изображений в наборе, и это говорит о том, что конкретная запись продолжается с предыдущей кабины. Если вы начали с первой кабины в наборе, вы уже видели fdintCOPY_FILE
для файла. Если вы обрабатываете случайные файлы .cabs, вы тоже не сможете их использовать, поскольку у вас не будет начала извлечения файла.
fdintNEXT_CABINET : Вы можете использовать это, чтобы запросить у пользователя новый каталог для следующего кабинета, но для поддержки простого охвата просто верните 0, если переданное имя файла является действительным, или -1, если оно не ' т. Если вы вернете 0, а кабина будет неправильной или неправильной, вызов будет вызван снова. Самый простой подход (если вы не запрашиваете новый диск / каталог), это просто проверить pfdin^.fdie
. Если это FDIError_None , то при первом вызове запрашиваемой кабины оно равняется, так что вы можете вернуть 0. Если что-то еще, то оно уже пыталось открыть запрошенную кабину хотя бы один раз, так что вы можете вернуть -1 как ошибка.
fdintENUMERATE : Я думаю, вы можете проигнорировать это. Он не описан в документации, и две библиотеки, которые я изучал, не используют его. Это может быть остаток от предыдущей версии API.