IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Нетепизированные файлы (буфер)
Skrip
сообщение 14.12.2004 14:16
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


Код
Uses Crt;
Var
FromF, ToF : File;
NumRead, NumWritten : Word;
Buf : array [1..64512] of char;
i: integer;
Begin
clrscr;
Assign(FromF, 'c:\new.exe');
Reset(FromF, 1);
Assign(ToF, 'c:\copy_new.exe');
ReWrite(ToF, 1);
WriteLn('Копирую: ', FileSize(FromF), ' байт...');
Repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
Until (NumRead = 0);
Close(FromF);
Close(ToF);
readln
end.

end.

Почему размер буфера записи и чтения устанавливается по 1 байту
(я очень сильно догадываюсь, но хочу узнать правильно или нет)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
SKVOZNJAK
сообщение 16.12.2004 18:27
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Гы. Reset(FromF, 1); Строка совершенно правильная. 1 обозначает, что третий параметр в процедурах чтения и записи будет умножаться на 1 а не на 128 как по умолчанию. У меня была похожая прога (где-то есть на форуме), только там всё через GOTO написано smile.gif Цикл чтения-записи сильно мудрёно написан, и неправильно, к томуже. Так получше будет
Код
BlockRead(FromF, Buf, NumRead);
BlockWrite(ToF, Buf, NumRead,);

Никогда не пользовался четвёртым параметром. ИМХО счётчик вообще не нужен, выбрось четвёртую переменную smile.gif Тогда процесс выглядит так: третий параметр в процедурах чтения и записи ставим NumRead, по умолчанию он равен размеру буфера(выставляется перед циклом). Перед чтением производится сравнение длины файла (qqq: longint) и NumRead. Если qqq больше, то от него отнимаем NumRead, в противном случае NumRead:=qqq; qqq:=0 ......... Until (qqq = 0); Только, Ихмо, с гото получается прикольнее lol.gif

Сообщение отредактировано: SKVOZNJAK - 16.12.2004 18:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 23.07.2025 9:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"