Russian Qt Forum
Ноябрь 23, 2024, 11:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача файла по UDP  (Прочитано 7890 раз)
akaMDA
Гость
« : Октябрь 22, 2009, 21:23 »

Мне необходимо передать файл посредством UDP!!!!! (именно UDP, а не FTP). написал вот что
функция передачи:
Код
C++ (Qt)
void SendFile_Widget::SendFile()
{
QString fil=QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("1"), QString::fromLocal8Bit("c:\\"), 0,0,0);
 
if(fil.isEmpty()) return;
 
QStringList lt=fil.split('/');
QString nam_file=lt.takeLast();
QByteArray datf;
QFile fil_out(fil);
QDataStream out(&datf, QIODevice::WriteOnly);
 
fil_out.open(QIODevice::ReadOnly);
 
QString fils(fil_out.readAll());
out<<nam_file<<fils;
tb->setText(fils);
socket_out->writeDatagram(datf, con_host.getIP(cb->currentText()), 1012);

слот приема:
Код
C++ (Qt)
void SendFile_Widget::InboxFile()
{
 
QByteArray dat;
QHostAddress* ha=new QHostAddress;
quint16* port=new quint16;
do
{
dat.resize(socket_in->pendingDatagramSize());
socket_in->readDatagram(dat.data(), dat.size(), ha, port);
}while(socket_in->hasPendingDatagrams());
 
QString mess;
QString nam_file;
 
QDataStream in(&dat, QIODevice::ReadOnly);
in>>nam_file>>mess;
 
QByteArray datf;
QFile newfil(nam_file);
QDataStream inf(&datf, QIODevice::WriteOnly);
newfil.open(QIODevice::WriteOnly);
inf<<mess;
newfil.write(datf);
QMessageBox::warning(0, QString::fromLocal8Bit("ВНИМАНИЕ"), QString::fromLocal8Bit("Пришел файл!"), QMessageBox::Ok);
 
};
но результат записывается в бинарном виде и нормально соответственно не открывается.
Посоветуйте пожалуйста, как правильно результат записать в небинарном виде?
Записан
akaMDA
Гость
« Ответ #1 : Октябрь 22, 2009, 22:43 »

По большому счету, как считать файл в QByteArray и записать содержимое под новым именем?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Октябрь 22, 2009, 22:50 »

Пробуем так в слоте приема:

Код
C++ (Qt)
newfil.open(QIODevice::WriteOnly | QIODevice::Text)


Кстате, а че б не использовать QTextStream вместо QDataStream?
« Последнее редактирование: Октябрь 22, 2009, 22:52 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
akaMDA
Гость
« Ответ #3 : Октябрь 22, 2009, 23:08 »

Не, не помогло. если data - то открывает файл, говоря что это бинарник. а если text - то файл оказывается пустой.
я уже пытаюсь хотя бы сделать так
Код
C++ (Qt)
QByteArray datf;
QFile fil_out(fil);
QTextStream out(&datf, QIODevice::WriteOnly| QIODevice::Text);
 
fil_out.open(QIODevice::ReadOnly);
 
out<<fil_out.readAll();
 
QFile newfil("c:/1/fil.txt");
newfil.open(QIODevice::WriteOnly | QIODevice::Text);
newfil.write(datf);
хотя бы считать файл любой и перезаписать.
Может кто знает как действует функция copy() в qt?
Записан
akaMDA
Гость
« Ответ #4 : Октябрь 23, 2009, 20:37 »

Вроде разобрался. Если читать файл не из потока, то все ОК))
Посоветуйте плиз ссылочку про потоки в Qt - хочу поглубже разобраться с вопросом.
Записан
BRE
Гость
« Ответ #5 : Октябрь 23, 2009, 20:52 »

Посоветуйте плиз ссылочку про потоки в Qt - хочу поглубже разобраться с вопросом.
Традиционно.  Подмигивающий
Assistant:
* QDataStream
* Format of the QDataStream Operators
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 23.