Название: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: Radamas от Март 13, 2008, 13:33 пытаюсь скопировать все файлы из одного директория в другой с помощью QProcess и команды cp, но ничего не происходит, только изменяется дата изменения файлов! Директории все созданы и из терминала команда работает на все 100, а при помощи QProcess похоже копирует файлы в то же место где они и лежали! Помогите! версия Qt 3.3.3:
что делаю: QProcess proc; proc.addArgument("cp"); proc.addArgument("-f"); proc.addArgument("/Maps/Temp/*.*"); proc.addArgument("/Maps/Temp/1"); bool result = proc.start() //возвращает 1 while(proc.isRunning()) { } В чем проблема не пойму! Может есть другие простые методы копирования файлов? Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: Steven_Orko от Март 13, 2008, 14:18 Проблемма в том, что не дочитал мануал по башу либо по cp. Ты не указал, какие файлы копировать.
А файла со звездочками не существует. Это баш вместо звездочек поставляет по маске, что найдет. Так что тебе надо явно указать, какие файлы копировать. Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: Radamas от Март 13, 2008, 16:53 Проблемма в том, что не дочитал мануал по башу либо по cp. Ты не указал, какие файлы копировать. А файла со звездочками не существует. Это баш вместо звездочек поставляет по маске, что найдет. Так что тебе надо явно указать, какие файлы копировать. Спасибо большое:) я не догадался что в QProcess нельзя использовать *.* Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 26, 2010, 15:23 Как записать результат выполния командной строки - в файл с помощью QProcess?
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: niXman от Март 26, 2010, 15:29 Цитировать cp file1.ext file2.ext > log.txt Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 26, 2010, 15:38 Нет , скажем sl >a.a на QT -кажись должно :
QProcess proc; proc.addArgument("sl"); proc.addArgument(">a.a"); bool result = proc.start() //возвращает 1 while(proc.isRunning()) { } но почему-то ничего не записывает...в файл a.a Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 26, 2010, 15:46 а может стоит попробовать QFile....
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: niXman от Март 26, 2010, 15:49 Нет , скажем sl >a.a на QT -кажись должно : вы о чем? и кто такой sl ?QProcess proc; proc.addArgument("sl"); proc.addArgument(">a.a"); bool result = proc.start() //возвращает 1 while(proc.isRunning()) { } но почему-то ничего не записывает...в файл a.a Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 26, 2010, 16:05 "Команда ls сначала выводит список всех файлов (не каталогов), перечисленных в командной строке, а затем выводит список всех файлов, находящихся в каталогах, перечисленных в командной строке. " Мне нужно подсчитать контрольную сумму cd - диска и записать в файл. С помощью командной строки можно найти как это сделать - вопрос как записать в файл, чтоб потом в программе использовать? Для примера взял команду sl.
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 26, 2010, 16:28 Перепутал , команда "ls" - Я так думаю что подсчёт контрольной суммы : ls /mnt/cdrom -a |md5sum >a.a
Только почему-то ничего не записывает в файл . Поэтому упростил до: ls >a.a но всё равно с помощью QProcess ничего не записалось в файл... Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 26, 2010, 16:31 пайпы и команды перенаправления ввода-вывода с QProcess не работают...
используй Код: void QProcess::readyReadStdout () [signal] Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 29, 2010, 09:11 Не совсем понял как писать , откуда считывать? Можно пример?
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 29, 2010, 12:28 это сигнал.... его испускает QProccess при проявлении данных в нем.... напиши слот.... соедини его сигналом.... и в нем читай данные..
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 29, 2010, 15:00 Сигнал посылаю - данные давай , а нас посылают обратно...
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 29, 2010, 16:28 Пишу с помощью файла .ui.h , поэтому если бы сигнал был бы от кнопки или ещё чего-нибудь , то подсоединил бы... а тут сигнал от QProcess поискал в примерах , там дано в таком виде:
QProcess proc7; ... proc7.addArgument("ls"); proc7.addArgument(">a.a"); connect( proc7, SIGNAL(proc7.readyReadStdout()), this, SLOT(readFromStdout()) ); void MyDialog2::readFromStdout() { // textEdit->append( proc7->readStdout() ); } При компиляции выдаёт ошибку: c:\Qt\myd290310\MyDialog2.ui.h(1149): error C2664: 'bool QObject::connect(const QObject *,const char *,const QObject *,const char *)' : cannot convert parameter 1 from 'QProcess' to 'const QObject *' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 29, 2010, 16:50 это потому что connect требует от тебя указатель в качестве аргумента....
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: MoPDoBoPoT от Март 29, 2010, 16:56 Пишу с помощью файла .ui.h , поэтому если бы сигнал был бы от кнопки или ещё чего-нибудь , то подсоединил бы... Наверное ты имел ввиду QtDesigner. Кстати, для новичков лучше обходится без него.connect( proc7, SIGNAL(proc7.readyReadStdout()), В метод QObject::connect() надо передавать указатели, а QProcess создан на стеке, что, кстати, является ошибкой, так как при выходе из функции (скорей всего из конструктора) объект разрушится и никаких сигналов ты не получишь.this, SLOT(readFromStdout()) ); Создавай QProcess в куче: QProcess *proc7 = new QProcess(this); Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 29, 2010, 18:07 [Создавай QProcess в куче: QProcess *proc7 = new QProcess(this); Тогда ошибки здесь :proc7.addArgument("ls"); proc7.addArgument(">a.a"); Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: MoPDoBoPoT от Март 29, 2010, 18:18 [Создавай QProcess в куче: QProcess *proc7 = new QProcess(this); Тогда ошибки здесь :proc7.addArgument("ls"); proc7.addArgument(">a.a"); proc7->addArgument("ls"); Насчет моего предыдущего поста: надо же хранить указатель на QProcess в виде члена класса (доступ к объекту нужен и в других методах), поэтому надо так: proc7 = new QProcess(this); А в описании класса добавить QProcess *proc7; Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 29, 2010, 18:25 а может стоит начать с изучения c++ ??
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Март 29, 2010, 18:54 Само собой :) У тебя же указатель... (С++ знаешь?) Раньше на Делфи писал , там всё логично - последовательно выполняется , вместо рассказа о том как всё работаёт - конкретно оператор - в с++ видно наоборот сначала рассказ где что подёргать вместо операторов . Конечно , стрёлка нужна всё оттранслировалось , но без "proc7 = new QProcess(this);" - пока не понял для чего это , поэтому при выполнении пишет "программа завершилась с ошибкой" . Все языки одинаковые - всё изучается на практике :-)proc7->addArgument("ls"); Насчет моего предыдущего поста: надо же хранить указатель на QProcess в виде члена класса (доступ к объекту нужен и в других методах), поэтому надо так: proc7 = new QProcess(this); А в описании класса добавить QProcess *proc7; Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: Alex Custov от Март 29, 2010, 19:28 Перепутал , команда "ls" - Я так думаю что подсчёт контрольной суммы : ls /mnt/cdrom -a |md5sum >a.a MD5 сумма считается с образа, а не со списка файлов! Нужно читать устройство CDROM-a (/dev/cdrom, /dev/hda - в зависимости от системы). Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: Alex Custov от Март 29, 2010, 20:11 Все языки одинаковые - всё изучается на практике :-) Все языки должны изучаться на профессиональной документации, попутно занимаясь практикой. Иначе результаты как правило плачевны ::) Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: niXman от Март 29, 2010, 20:26 дополню: для некоторых разделов, потребуются права супер-юзера.
а читать раздел, как-то так: Код
Название: Re: Копирование файлов с помошью QProcess и cp! Проблем Отправлено: BigHom от Март 30, 2010, 14:41 выводит только содержимое cd-диска:
Код Контрольную сумму не выводит - как вывести КС cd-диска ? Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: crossly от Март 30, 2010, 16:15 повторяю второй раз... перенаправление ввода-вывода и пайпы это фишки оболочки (shell) ... QProcess никак на них не отреагирует...
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Апрель 02, 2010, 16:18 Так может по-другому можно как-то подсчитать? не с помощью QProcess... чтоб результат был такой же :-)
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: niXman от Апрель 02, 2010, 17:35 тебе 4 раза сказали как это правильно делать! я тебе код написал, несколькими постами выше!
Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: kuzulis от Апрель 02, 2010, 18:31 Тут по аналогичному вопросу мне советовали создать .bat (windows) или .sh (*.nix) файл в котором прописать все что нужно и его запускать... (поищи по форуму)
Хотя, как вариант - можно попытаться подсунуть QProcess вызов cmd.exe (windows) или /bin/bash (*nix) - а аргументами будут являться всё остальное ( ls, /mnt/cdrom и т.п.) Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Апрель 05, 2010, 11:07 тебе 4 раза сказали как это правильно делать! я тебе код написал, несколькими постами выше! Выдаются следующие ошибки:c:\Qt\MyDialog2.ui.h(1416): error C2062: type 'char' unexpected c:\Qt\MyDialog2.ui.h(1416): error C2065: 'array' : undeclared identifier c:\Qt\MyDialog2.ui.h(1414): error C2065: 'cerr' : undeclared identifier c:\Qt\MyDialog2.ui.h(1414): error C2065: 'errno' : undeclared identifier c:\Qt\MyDialog2.ui.h(1413): error C2065: 'ifstream' : undeclared identifier c:\Qt\MyDialog2.ui.h(1413): error C2146: syntax error : missing ';' before identifier 'file' c:\Qt\MyDialog2.ui.h(1417): error C2228: left of '.good' must have class/struct/union type type is ''unknown-type'' c:\Qt\MyDialog2.ui.h(1416): error C2653: 'boost' : is not a class or namespace name c:\Qt\MyDialog2.ui.h(1413): error C2653: 'std' : is not a class or namespace name c:\Qt\MyDialog2.ui.h(1414): error C2653: 'std' : is not a class or namespace name c:\Qt\MyDialog2.ui.h(1413): error C3861: 'file': identifier not found, even with argument-dependent lookup c:\Qt\MyDialog2.ui.h(1417): fatal error C1903: unable to recover from previous error(s); stopping compilation Если устранить ошибки будет правильно подсчитана КС cd-диска? Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BigHom от Апрель 12, 2010, 08:56 Спасибо за помощь , контрольная сумма считается. Но возник вопрос:
1) при записи на диск cd-диск , процесс длится достаточно долго и хотелось бы ,чтобы выдавалось сообщение на экран - типа "идёт запись", но сообщение появляется после записи , что-то не даёт выдаваться сообщению сразу же до : bool result = proc.start() //возвращает 1 while(proc.isRunning()){} Название: Re: Копирование файлов с помошью QProcess и cp! Проблема!!! Отправлено: BRE от Апрель 12, 2010, 09:02 while(proc.isRunning()){} Вот этот цикл и не дает. |