Конкатенация больших файлов с помощью API ядра Win NT

Я искал способ объединить большие файлы (несколько гигабайт) вместе без необходимости переписывать один из файлов. Я уверен, что ОС делает это внутренне при манипулировании таблицей основных файлов. Это чисто для внутреннего приложения, где скорость критична даже за счет целостности данных (в случае риска недокументированных API). Приложение обрабатывает большое количество многоканальных данных Ethernet с высокой пропускной способностью, где поврежденная единица работы (в данном случае файл) не окажет большого влияния на общие результаты обработки.

На момент объединения файлов A а также Bвовлеченное усилие равно: A[Read] + B[Read] +C [Write] `. Кто-нибудь из вас, NT-гуру, пролил некоторый свет на то, как обойти это, чтобы попасть в MFT напрямую?

Я не смог получить никаких подсказок относительно того, какой API исследовать, и был бы признателен за некоторые советы. Несмотря на то, что приложение управляется, я бы с удовольствием изучил нативные API и даже настроил облегченные виртуальные машины для тестирования.

Заранее спасибо.

3 ответа

Решение

Если вы добавляете файл B в файл A, все, что вам нужно сделать, это открыть файл A для записи + добавления, найти конец файла, затем прочитать из B и записать в A.

Если вы хотите создать файл C как объединение файлов A и B, то вам придется создать файл C и скопировать A в C, а затем B в C.

Там нет никаких ярлыков.

Это не совсем то, что может сделать файловая система. Файловые системы выделяют пространство для файлов в терминах кластеров и блоков данных, а не в байтах. Объединение двух файлов, подобных этому, будет работать только в том случае, если они оба будут кратны размеру кластера, и у FS могут быть другие предположения о том, как блоки распределяются между файлами под обложками. Возможно, вы сможете сделать это самостоятельно с файловой системой, если отключите ее и напишете инструмент для непосредственного управления всеми структурами файловой системы. Но вы рискуете испортить весь диск, а не только один файл.

Я не знаю вашей точной ситуации, но можно ли вообще не добавлять файлы вместе? Просто продолжайте бросать файлы в какую-то директорию по мере получения данных и сохраняйте индекс

Затем, когда нужны данные, используйте индекс для объединения данных в один новый файл? Таким образом, вы когда-нибудь делали дорогостоящее слияние файлов по требованию?

Другие вопросы по тегам