Название: метод копирования папки Отправлено: br3d от Июнь 14, 2009, 01:26 подскажите, есть ли в какомнибудь из встроенных классов qt метод копирования папки ???
или как то придется ухищряться через QFile::copy ( const QString & newName )???? Название: Re: метод копирования папки Отправлено: ритт от Июнь 14, 2009, 03:06 вот оно! а я уж ожидал, что никого эта таска не интересует...
как раз в понедельник собирался ругать троллей :) суть в том, что копирование папки реализовано только для венды и только лишь одним способом (и то, не слишком логичным) - QFile("c:/dirpath").copy("d:/newdirpath")). согласитесь, куфайл, принимающий на вход путь к папке - нелепица...но с этим пока что ничего не поделаешь. советую не рассчитывать на исправление ситуации до выхода 4.6. поэтому QDirIterator + QFile::copy в зубы - и вперёд. зы. просяню ситуацию - отпишусь в данной ветке. Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 14, 2009, 06:15 суть в том, что копирование папки реализовано только для венды и только лишь одним способом (и то, не слишком логичным) - QFile("c:/dirpath").copy("d:/newdirpath")). согласитесь, куфайл, принимающий на вход путь к папке - нелепица...но с этим пока что ничего не поделаешь. А откуда информация что для винды QFile("c:/dirpath").copy("d:/newdirpath")) - работает? И когда тролли обещают 4.6 версию? Название: Re: метод копирования папки Отправлено: ритт от Июнь 14, 2009, 06:31 суть в том, что копирование папки реализовано только для венды и только лишь одним способом (и то, не слишком логичным) - QFile("c:/dirpath").copy("d:/newdirpath")). согласитесь, куфайл, принимающий на вход путь к папке - нелепица...но с этим пока что ничего не поделаешь. А откуда информация что для винды QFile("c:/dirpath").copy("d:/newdirpath")) - работает? И когда тролли обещают 4.6 версию? судя по коду, должно работать. официальных сроков ещё нет, вроде бы... Название: Re: метод копирования папки Отправлено: Пантер от Июнь 14, 2009, 10:37 Можно пока через апи сделать.
Название: Re: метод копирования папки Отправлено: ритт от Июнь 14, 2009, 10:40 через какое апи?
Название: Re: метод копирования папки Отправлено: br3d от Июнь 14, 2009, 11:03 хех, в том и проблемма, что для линукса надо ((( :-[
Название: Re: метод копирования папки Отправлено: Rcus от Июнь 14, 2009, 11:12 Для Unix образных придется привязываться к какой-нибудь библиотеке, например KIO (http://api.kde.org/4.2-api/kdelibs-apidocs/kio/html/namespaceKIO.html#fc72bd38f53ade4d3a28dfeef35f4065)
Название: Re: метод копирования папки Отправлено: Пантер от Июнь 14, 2009, 11:12 В винде через винапи.
В Линухе через вызов QProcess->start("/bin/sh cp -r ..........") Название: Re: метод копирования папки Отправлено: ритт от Июнь 14, 2009, 11:23 жестоко. а QDirIterator + QFile::copy не канает?
Название: Re: метод копирования папки Отправлено: Rcus от Июнь 14, 2009, 11:28 Конечно жестоко вопроизводить закат солнца вручную :) Ладно, умолкаю, ибо понимаю что любое упоминание kdelibs здесь можно воспринимать как толстый троллинг пуристов.
Название: Re: метод копирования папки Отправлено: Пантер от Июнь 14, 2009, 11:34 жестоко. а QDirIterator + QFile::copy не канает? Это лучший вариант. Но если автору не хочется заморачиваться и писать свою функцию копирования, то мой вариант будет проще. Название: Re: метод копирования папки Отправлено: ритт от Июнь 14, 2009, 12:10 жестоко. это я про QProcess.Название: Re: метод копирования папки Отправлено: br3d от Июнь 14, 2009, 19:58 Всем спасибо !!!!
буду копаться с итерацией, не выйтет тогда аоспользуюст идеей на счет QProcess Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 14, 2009, 22:04 Не понимаю в чем проблема.
Ну, нет рекурсивного копирования директории, но есть возможность обхода начиная с заданного пути(даже без всяких встроенных итераторов), создания папок и копирования файлов. Проблема должна решиться написанием 20-50 сторчек кода. Или я в чем-то не прав? Название: Re: метод копирования папки Отправлено: Rcus от Июнь 14, 2009, 22:39 Не понимаю в чем проблема. Это мягко говоря оптимистичный прогноз, во время копирования может произойти все что угодно, начиная от прав, заканчивая отсутствием inode'ов (да, именно поэтому у меня на EeePC не собрались kdelibs - не хватило 240к файлов). А ведь как обычно захочется асинхронности, отображения прогресса и прочего... Удачи уложиться в KLoC.Ну, нет рекурсивного копирования директории, но есть возможность обхода начиная с заданного пути(даже без всяких встроенных итераторов), создания папок и копирования файлов. Проблема должна решиться написанием 20-50 сторчек кода. Или я в чем-то не прав? Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 15, 2009, 06:42 Это мягко говоря оптимистичный прогноз, во время копирования может произойти все что угодно, начиная от прав, заканчивая отсутствием inode'ов (да, именно поэтому у меня на EeePC не собрались kdelibs - не хватило 240к файлов). А ведь как обычно захочется асинхронности, отображения прогресса и прочего... Удачи уложиться в KLoC. Ты абсолютно прав. Но как говориться - не все сразу. Основную обработку ошибок сделать не трудно, а все остальное либо делать позже, либо ждать от троллей. Название: Re: метод копирования папки Отправлено: ритт от Июнь 15, 2009, 07:52 воот, я про это же.
зы. у троллей при копировании папки об ошибках не уведомляется, вроде... Название: Re: метод копирования папки Отправлено: br3d от Июнь 16, 2009, 20:04 долго маялся, с QDirIterator ...
получилось как то так что он из всех вложенных подпапок копирует в одну целевую..., Вообщем в результате, реализовал так: QProcess prc; QStringList pars; pars<<"-r"; pars<< path; pars<< path2; prc.start("cp",pars); prc.waitForFinished(); //от без этой функции, выполнение программы //прерывалось до её завершения и копировалось не все((( Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 16, 2009, 21:25 Ну-Ну.
И как ты это будешь контролировать? Например, если какой-то файл не сможет скопироваться по тем или иным причинам, как ты это отследишь? Название: Re: метод копирования папки Отправлено: Пантер от Июнь 17, 2009, 06:19 Можно будет ловить код завершения процессса.
Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 17, 2009, 09:30 Можно будет ловить код завершения процессса. Слишком мало информации. Проще самому организовать рекурсивное копирование. Кстати "cp" под виндой нет. Название: Re: метод копирования папки Отправлено: spirit от Июнь 17, 2009, 09:37 Можно будет ловить код завершения процессса. Слишком мало информации. Проще самому организовать рекурсивное копирование. Название: Re: метод копирования папки Отправлено: Пантер от Июнь 17, 2009, 11:30 Можно будет ловить код завершения процессса. Слишком мало информации. Проще самому организовать рекурсивное копирование. Кстати "cp" под виндой нет. Название: Re: метод копирования папки Отправлено: ритт от Июнь 17, 2009, 11:43 ха. а отписаться забыл :)
если коротко, то все об этом знают, помарочка-напоминалочка в коде стОит, но никому пока дела до данной задачи нет (кстати, такой таски в паблике трекера тоже нет - можно смело рапортовать). судя по манпагам, подобного функционала в апи никсов также нет - единственная альтернатива - рекурсивный QDirIterator + код QFile::copy. и даже больше - если, не дай божа, вы написали свою реализацию файлэнджины для не-локальных накопителей (попросту говоря, вфс), текущая реализация не позволит скопировать папку с физической фс на виртуальную (и наоборот) - и всё-равно придётся грызть QDirIterator + код QFile::copy. если кому интересно, я намерен к 4.6 данное безобразие искоренить (если меня в конце-концов не забанят на гиториусе :) ) Название: Re: метод копирования папки Отправлено: spirit от Июнь 17, 2009, 11:44 если кому интересно, я намерен к 4.6 данное безобразие искоренить (если меня в конце-концов не забанят на гиториусе :) ) ага, было бы очень неплохо.Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 17, 2009, 11:47 Да ладно. А как же copy и xcopy? 1) платформозависимо2) надо отключать всякие подтверждения ... 3) Опять же обработка ошибок, проще сделать самому рекурсивное копиривание и добавлять различные обработки ошибок, откаты итд, по мере развития кода и необходимости. Простой вариант можно написать и отладить за пару часов. Название: Re: метод копирования папки Отправлено: Пантер от Июнь 17, 2009, 11:50 spectre71: я не говорил что этот вариант лучше. Просто если есть трудности самонаписания рекурсивного копирования, а сроки поджимают, можно использовать данный вариант, который потом можно будет заменить на верный.
Название: Re: метод копирования папки Отправлено: spectre71 от Июнь 17, 2009, 11:50 если кому интересно, я намерен к 4.6 данное безобразие искоренить (если меня в конце-концов не забанят на гиториусе :) ) Это очень многим надо, в смысле искоренить безобразие :) Название: Re: метод копирования папки Отправлено: mugabe от Июнь 17, 2009, 12:50 ...который потом можно будет заменить на верный. в таких ситуациях обычно "потом" наступает только когда приходит другой разработчик и о***вает от увиденного :)) |