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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Отправить файл по сети  (Прочитано 10483 раз)
RomiX
Гость
« Ответ #15 : Февраль 16, 2012, 20:22 »

т.е. когда приходит имя файла и его размер, создавать сам файл, и выходить из readyRead(), а потом когда начнут приходить остальные куски (т.е. будет вызываться readyRead()) писать их в файл?
Записан
neversleep
Гость
« Ответ #16 : Февраль 16, 2012, 21:18 »

т.е. когда приходит имя файла и его размер, создавать сам файл...
И НЕ выходя из readyRead в цикле получаешь содержимое файла.
Код
C++ (Qt)
QString fileName = имя_файла;
qint64 fileSizeIn = размер_фала;
qint64 fileSizeOut = 0; // сюда заносится размер полученных данных
 
QFile file(fileName);
if (file.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
   do {
       fileSizeOut += file.write(socket.readAll());
   } while (fileSizeOut < fileSizeIn && socket.waitForReadyRead());
   file.close();
}
 
if (fileSizeOut == fileSizeIn) // файл получен
 
Записан
BRE
Гость
« Ответ #17 : Февраль 16, 2012, 21:26 »

И НЕ выходя из readyRead в цикле получаешь содержимое файла.
Для чего этот экстремализм? Для чего останавливать программу на время чтения одного файла? А если нужно получать сразу 100 файлов? Улыбающийся
Пришла полная секция - запиши ее в файл.
Записан
RomiX
Гость
« Ответ #18 : Февраль 16, 2012, 22:29 »

спс, а что если в отдельном потоке это запустить?
2BRE: что значит пришла полная секция? и как поймать данное событие
Записан
BRE
Гость
« Ответ #19 : Февраль 16, 2012, 22:42 »

2BRE: что значит пришла полная секция? и как поймать данное событие
На одной стороне:
- читаешь из файла кусок (например 256 Kb)
- готовишь пакет: <размер куска> <данные куска>
- отправляешь данный пакет
- повторяешь, пока не закончиться файл

На другой стороне, при приходе пакета в слоте обрабатывающем сигнал readyRead:
- размер доступных для чтения данных меньше числа для хранения размера куска - выходим из слота
- читаем размер куска
- размер доступных для чтения данных меньше размера куска - выходим из слота
- читаем кусок в буфер
- записываем буфер в файл
- выходим из слота


Записан
neversleep
Гость
« Ответ #20 : Февраль 17, 2012, 06:36 »

И НЕ выходя из readyRead в цикле получаешь содержимое файла.
Для чего этот экстремализм? Для чего останавливать программу на время чтения одного файла? А если нужно получать сразу 100 файлов? Улыбающийся
Пришла полная секция - запиши ее в файл.
А если цель программы скопировать только 1 файл? Улыбающийся
« Последнее редактирование: Февраль 17, 2012, 06:42 от neversleep » Записан
RomiX
Гость
« Ответ #21 : Февраль 17, 2012, 08:22 »

спс! как попробую напишу
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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