LINUX.ORG.RU

Рекурсивное копирование директории средствами C++

 , , ,


0

1

Т.к. стандартных средств кроме бустовских я не нашел, пришлось думать самому. Решил задействовать readdir для чтения директории и при нахождение файла копировать его с помощью sendfile, а при нахождение директории уйти в рекурсию.
Возник такой вопрос:
Стоит ли использовать полученный из структуры dirent параметр d_type(В настоящее время, только файловые системы (среди которых: Btrfs, ext2, ext3 и ext4) поддерживают возврат типа файла в d_type. Все приложения должны правильно обрабатывать возвращаемое значение DT_UNKNOWN.)?
Или лучше сделать вызов fstat и из структуры stat считать mode и прогнать его через макрос S_ISDIR? Или разницы нет?

★★★★★

Недавно писал подобное. Как раз таким же способом. Мне, правда, нужен был размер файла, так что у меня stat() без вариантов.

ilammy ★★★
()

чем тебя boost не устроил?

void copy_directory(const path& from, const path& to);

это куда проще чем городить свой велосипед.

anonymous
()
Ответ на: комментарий от anonymous

Один черт рекурсию городить из них, только теперь еще одна либа в зависимости попадет.

deterok ★★★★★
() автор топика

Попробуй украсть исходники cp

ах да, их же не надо красть, надо просто не постить всякую херню на ЛОРе

sdio ★★★★★
()

почему не get from system «find $PATHFROM» и копирование каждого?

зачем самому делать du $PATHFROM/* |cut -f2 аналог?

qulinxao ★★☆
()
Ответ на: комментарий от anonymous

чем тебя boost не устроил?

void copy_directory(const path& from, const path& to);

Ты сначало прочитай что делает copy_directory в boost, анонимус ты наш!

alpha4
()
Последнее исправление: alpha4 (всего исправлений: 1)

а при нахождение директории уйти в рекурсию.

А если где-нибудь внутри директории будет симлинк на нее саму, можно уйти в бесконечную рекурсию

SZT ★★★★★
()
Ответ на: комментарий от deterok

только теперь еще одна либа в зависимости попадет

а разве сейчас что-то пишется без boost? Хелловорды какие-то?

niXman ★★★
()
Ответ на: комментарий от niXman

а разве сейчас что-то пишется без boost?

да.

Хелловорды какие-то?

не угадал.

emulek
()
Ответ на: комментарий от emulek

Ок, погляжу, но мне казалось, что они как-то стагнируют и не используют всех возможностей современной системы.

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Да сразу было понятно что непереносимый быдлокод.

slovazap ★★★★★
()

2014 год, а у C++ wannabe все те же вопросы как и в 80х. Это просто охеренно.

lovesan ★★★
()
Ответ на: комментарий от deterok

что они как-то стагнируют и не используют всех возможностей современной системы.

системы бывают разные. Сейчас Linux в каждой кофемолке, но вот SSD на 1Т пока не в каждой кофемолке, увы. Ты посмотри coreutils, и добавь туда что-то новое, если хочется. То что в coreutils должно быть обязательно.

emulek
()
Ответ на: комментарий от deterok

Автор, объясни в чем смысл этих извращений? Зачем простейшие задачи решать громозкими велосипедами, которые потом еще поддерживать и которые юзают всякую специфику? Куда приятнее было бы видеть в коде доставшемуся по наследству вызов функции из буста или даже простро ср, чем ваш большой велосипед.

pulo
()
Ответ на: комментарий от deterok

Поделись результатами как реализуешь, было бы круто затюнить ср если это ощутимая разница

pulo
()
Ответ на: комментарий от emulek

PS: в данном случае это всё равно будет в io упираться, как не крути. Смысл? Или я не понял, и речь про tmpfs?

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.