crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> QFtp, как закачать файл?
SABROG
  опции профиля:
сообщение 5.6.2009, 14:33
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Насколько я помню fileName будет содержать не имя файла, а полный путь к файлу вместе с именем. Получается ты пытаешься создать на фтп файл вида "c:\windows\system32\xcopy.exe"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 5.6.2009, 14:38
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 12.4.2009
Из: Димитровград
Пользователь №: 676

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да, fileName содержит полный путь до файла, но как тогда выделить имя файла и сделать правильную загрузку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 5.6.2009, 14:50
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


QFileInfo fi(fileName);
ftp->put( &upfile, fi.fileName());


Правда у меня есть некоторые сомнения насчет таких вещей как. Нужно ли указывать путь на сервере типа "/filename.ext", типа root директория. И возвращает ли put() управление в программу моментально или ждет пока весь файл загрузится. Если первое (т.е. как и QHttp), то QFile должен создаваться не на стеке, а в куче (через new).

Сообщение отредактировал SABROG - 5.6.2009, 14:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.6.2009, 15:39
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


До кучи:
Цитата(PunX @ 5.6.2009, 18:01) *
QString file = fileName;
эта строка лишняя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 5.6.2009, 16:17
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 12.4.2009
Из: Димитровград
Пользователь №: 676

Спасибо сказали: 0 раз(а)




Репутация:   0  


Делаю
QString fileName = QFileDialog::getOpenFileName(this);
QFileInfo fi(fileName);
QFile upfile (fi.fileName());
ftp->put( &upfile, fi.fileName());
но опять же загрузка не идёт :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 5.6.2009, 16:43
Сообщение #16


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(SABROG @ 5.6.2009, 15:50) *
И возвращает ли put() управление в программу моментально или ждет пока весь файл загрузится. Если первое (т.е. как и QHttp), то QFile должен создаваться не на стеке, а в куче (через new).

так и есть.
управление возвращается а по окончании действия сигнал
void QFtp::commandFinished ( int id, bool error ) [signal]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 5.6.2009, 16:44
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(PunX @ 5.6.2009, 17:17) *
QFile upfile (fi.fileName());


Я же тебе не говорил использовать QFileInfo для QFile. Ты обрезал путь к файлу и пытаешься загрузить файл из текущей рабочей директории, а его там наверняка нет. Сделай так:

QFile *upfile = new QFile(fileName);
ftp->put(upfile, fi.fileName());


А, еще его открыть наверно надо через QFile::open()

Сообщение отредактировал SABROG - 5.6.2009, 17:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.6.2009, 17:06
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 5.6.2009, 18:50) *
Если первое (т.е. как и QHttp), то QFile должен создаваться не на стеке, а в куче (через new).
ты совершенно прав:
Цитата
Make sure that the dev pointer is valid for the duration of the operation (it is safe to delete it when the commandFinished() is emitted).


и тут
Цитата(SABROG @ 5.6.2009, 20:44) *
А, еще его открыть наверно надо через QFile::open()
тоже
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 5.6.2009, 17:43
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 12.4.2009
Из: Димитровград
Пользователь №: 676

Спасибо сказали: 0 раз(а)




Репутация:   0  


Можете привести пример с аплоадом файла?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 5.6.2009, 19:52
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 12.4.2009
Из: Димитровград
Пользователь №: 676

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всё собрал в одно и получилось вот такое вот:
 void FtpWindow::uploadFile() {
       QString fileName = QFileDialog::getOpenFileName(this);
       QFileInfo  fi(fileName);
       QFile *upfile = new QFile(fileName);
       upfile->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
       ftp->put(upfile, fi.fileName());
       connect(upfile, SIGNAL(done(bool)), this, SLOT(close()));
       upfile->close();
       progressDialog->setLabelText(tr("uploading %1...").arg(fi.fileName()));
       uploadButton->setEnabled(false);
       progressDialog->exec();}

Но всёравно файл не копируется на фтп...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 0:17