Наилучший подход к решению этой проблемы заключается в реализации метод сериализации для вашего объекта (ов). Как только это будет сделано, вам нужно будет реализовать правила для обмена такими сериализованными объектами на уровне коммуникационного протокола.
Например, вы можете сериализовать этот путь:
file size - 8bytes; path flags - 1byte; path size - 2bytes; actual path - `path size` bytes;
В поле Размер файла вы бы сохранить размер файла, на который указывает путь, в поле флагов вы бы сохранить дополнительную информацию о файле (например, если это каталог/файл и т. д.) в размере пути размер пути и в поле фактического пути (очевидно) путь.
Например, я хочу различать файлы/каталоги, установив бит 0 в поле flags: 1 для файлов, 0 для каталогов. Путь к каталогу, который содержит 512 файлов, таких как «/ ABC/d/EFG» будет сериализовать (используя |
в качестве разделителя полей):
536870912 | 0 | 10 | /abc/d/efg
сериализовать дерево каталогов, то вы бы просто сериализовать каждый файл в там и сохранить байты в векторе. Чтобы сериализовать вектор, вы просто добавили к нему префикс (скажем, 4 байта), указав количество файлов, которое он содержит; Например, поток в этом формате:
2 | (536870912 | 0 | 10 | /abc/d/efg), (536870912 | 0 | 10 | /abc/d/efh)
бы сказать мне, что у меня есть два путь к файлу записи и размер 512, оба каталога один с именем /abc/d/efg/
и один с именем /abc/d/efh
.
Теперь вы знаете, как сериализовать/десериализовать дерево каталогов. Чтобы отправить его другой стороне, я сначала префишу свой сериализованный объект с уникальным типом идентификатора сообщения (чтобы другая сторона узнала, что он получает), а затем отправит его.
Таким образом, в конце концов, учитывая две записи выше, и предполагая, я префикс этого типа сериализованном объекта с 0x00
конечным потоком будет выглядеть следующим образом:
0 | 2 | (536870912 | 0 | 10 | /abc/d/efg), (536870912 | 0 | 10 | /abc/d/efh)
No. Придумайте собственную реализацию или использовать какой-либо существующий подход к сетевой файловой системе (например, SFTP или NFS). –
Одним из способов было бы использовать QtNetwork в приложении dektop для отправки данных, а затем вы используете эти методы gui для отображения на клиентской стороне. – lpapp