Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 12:55   #1
adaptive person
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 30
Вопрос Многострочный текст

Я пишу на delphi программу которая позволяет передавать файлы любого размера по локальной сети. Алгоритм устроен так: программа-сервер делит HEX код файла на части и отправляет каждую часть программе-клиенту которая в свою очередь делает с его помощью файл. Это пока задумка, и у меня возникла проблема . Как пронумеровать части я уже придумал, а как поделить hex код на части (предварительно его превратив в текст) у меня не получилось . Скажите, как его поделить на части ?

Последний раз редактировалось adaptive person; 11.03.2012 в 13:11.
adaptive person вне форума Ответить с цитированием
Старый 11.03.2012, 13:34   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы изначально неверно походите.
Вам нужно оперировать не строчками, а байтовым потоком (или массивом байт).
А уж что это по сути представляет - текст на русском, текст на корейском, картинка в формате jpeg или кусок видео - это АБСОЛЮТНО неважно - это всё равно набор байт!
А делить очень просто: пока остаток в файле больше, чем размер буфера - читаем количество байт, равное размеру буфера.

вот, посмотрите, из старого доброго TurboPascal, из встроенной справки пример использования функции BlockRead/ BlockWrite (понятно, что Вам нужно другое, но общий подход/алгоритм Вы легко поймёте из данного примера!):
Код:
program CopyFile;
{ Simple, fast file copy program with NO error-checking }
var
  FromF, ToF: file;
  NumRead, NumWritten: Word;
  Buf: array[1..2048] of Byte;
begin
  Assign(FromF, ParamStr(1)); { Open input file }
  Reset(FromF, 1);  { Record size = 1 }
  Assign(ToF, ParamStr(2)); { Open output file }
  Rewrite(ToF, 1);  { Record size = 1 }
  Writeln('Copying ', FileSize(FromF), ' bytes...');
  repeat
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
    BlockWrite(ToF, Buf, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);
  Close(FromF);
  Close(ToF);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.03.2012, 13:39   #3
adaptive person
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы изначально неверно походите.
Вам нужно оперировать не строчками, а байтовым потоком (или массивом байт).
А уж что это по сути представляет - текст на русском, текст на корейском, картинка в формате jpeg или кусок видео - это АБСОЛЮТНО неважно - это всё равно набор байт!
А делить очень просто: пока остаток в файле больше, чем размер буфера - читаем количество байт, равное размеру буфера.

вот, посмотрите, из старого доброго TurboPascal, из встроенной справки пример использования функции BlockRead/ BlockWrite (понятно, что Вам нужно другое, но общий подход/алгоритм Вы легко поймёте из данного примера!):
Код:
program CopyFile;
{ Simple, fast file copy program with NO error-checking }
var
  FromF, ToF: file;
  NumRead, NumWritten: Word;
  Buf: array[1..2048] of Byte;
begin
  Assign(FromF, ParamStr(1)); { Open input file }
  Reset(FromF, 1);  { Record size = 1 }
  Assign(ToF, ParamStr(2)); { Open output file }
  Rewrite(ToF, 1);  { Record size = 1 }
  Writeln('Copying ', FileSize(FromF), ' bytes...');
  repeat
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
    BlockWrite(ToF, Buf, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);
  Close(FromF);
  Close(ToF);
end.
Спасибо большое ! Просто я не имел объемного представления об этом.
adaptive person вне форума Ответить с цитированием
Старый 11.03.2012, 15:11   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от adaptive person Посмотреть сообщение
позволяет передавать файлы любого размера по локальной сети.
с таким подходом это маловероятно...
как ты засунешь в мемо 2гиговый файл? а сколько будет по времени его хексить? зачем удвоение трафика?

а тупо без хекса передать сложно?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 11.03.2012, 20:49   #5
adaptive person
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
с таким подходом это маловероятно...
как ты засунешь в мемо 2гиговый файл? а сколько будет по времени его хексить? зачем удвоение трафика?

а тупо без хекса передать сложно?
Тогда ставятся некоторые ограничения по размеру файла.
adaptive person вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить многострочный текст с болдами в ячейку? alt2 Microsoft Office Excel 3 25.10.2011 15:48
С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом lineico Помощь студентам 0 09.05.2011 17:04
Как записать многострочный текст в реестр SeRhy Общие вопросы Delphi 9 17.03.2010 05:16
Многострочный DBGrid anastasia_d Помощь студентам 15 04.03.2010 17:12
Многострочный запрос Shyt SQL, базы данных 10 26.01.2010 18:34