![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Skrip |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код 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 байту (я очень сильно догадываюсь, но хочу узнать правильно или нет) |
FreeMan |
![]()
Сообщение
#2
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
А ты на разных файлах проверял? В смысле были файлы "жирнее" буфера?
-------------------- бб
|
GoodWind |
![]()
Сообщение
#3
|
![]() Автооответчик ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Цитата Reset(FromF, 1); 1 тут - размер читаемого блока.. -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Skrip |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
FreeMan, да. А че не так?
|
Skrip |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
GoodWind
Цитата 1 тут - размер читаемого блока.. Т.е. при первом выполнении BlockRead в буфер поместятся 64512 байт начиная с 1 байта;(хотя наверно не так) |
SKVOZNJAK |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Гы. Reset(FromF, 1); Строка совершенно правильная. 1 обозначает, что третий параметр в процедурах чтения и записи будет умножаться на 1 а не на 128 как по умолчанию. У меня была похожая прога (где-то есть на форуме), только там всё через GOTO написано
![]() Код BlockRead(FromF, Buf, NumRead); BlockWrite(ToF, Buf, NumRead,); Никогда не пользовался четвёртым параметром. ИМХО счётчик вообще не нужен, выбрось четвёртую переменную ![]() ![]() Сообщение отредактировано: SKVOZNJAK - 16.12.2004 18:43 |
Skrip |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата 1 обозначает, что третий параметр в процедурах чтения и записи будет умножаться на 1 а не на 128 как по умолчанию А зачем "третий параметр" умножать на 1 (или на 128, к примеру)? И почему если в Reset(FromF, 1) 1 изменить, допустим, на 128 то размер файла FromF (FileSize(FromF))уменьшается? ![]() Сообщение отредактировано: Skrip - 17.12.2004 15:39 |
Ozzя |
![]()
Сообщение
#8
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Нетипизированные файлы Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой -позволяет организовать высокоскоростной обмен данными между диском и памятью. При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах. Например, так: var f: file; begin ....... assign(f, 'myfile.dat') reset(f,512); ....... end. Длина записи нетипизированного файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам. Турбо Паскаль не накладывает каких-либо ограничений на длину записи нетипизированного файла, за исключением требования положительности и ограничения максимальной длины 65535 байтами (емкость целого типа WORD). Однако для обеспечения максимальной скорости обмена данными следует задавать длину, которая была бы кратна длине физического сектора дискового носителя информации (512 байт). Более того, фактически пространство на диске выделяется любому файлу порциями - кластерами, которые в зависимости от типа диска могут занимать 2 и более смежных секторов. Как правило, кластер может быть прочитан или записан за один оборот диска, поэтому наивысшую скорость обмена данными можно получить, если указать длину записи, равную длине кластера. При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE, которые заменяются соответственно высокоскоростными процедурами BLOCKREAD и 3LOCKWRITE . Для вызова этих процедур используются следующие предложения: BLOCKREAD (<ф .п . >, <буф>, < [, <NN>] ) BLOCKWRITE (<ф . п . >, <буф>, < [, <NN>] ) Здесь <буф> - буфер: имя переменной, которая будет участвовать в обмене данными с дисками; <D> - количество записей, которые должны быть прочитаны или записаны за одно обращение к диску; <NN> - необязательный параметр, содержащий при выходе из процедуры количество фактически обработанных записей. За одно обращение к процедурам может быть передано до N*RECS байт, где RECS - длина записи нетипизированного файла. Передача идет, начиная с первого байта переменной <буф>. Программист должен позаботиться о том, чтобы длина внутреннего представления переменной <буф> была достаточной для размещения всех N*RECS байт при чтении информации с диска. Если при чтении указана переменная <буф> недостаточной длины или если в процессе записи на диск не окажется нужного свободного пространства, возникнет ошибка ввода-вывода, которую можно заблокировать, указав необязательный параметр <NN> (переменная типа WORD). После завершения процедуры указатель смещается на <NN> записей. Процедурами SEEK, FILEPOS и FILESIZE можно обеспечить доступ к любой записи нетипизированного файла. |
SKVOZNJAK |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(Skrip @ 17.12.04 12:25) А зачем "третий параметр" умножать на 1 (или на 128, к примеру)? И почему если в Reset(FromF, 1) 1 изменить, допустим, на 128 то размер файла FromF (FileSize(FromF))уменьшается? ![]() На 1 чтобы удобнее ![]() ![]() Размер файла измеряется в количестве записей ![]() Сообщение отредактировано: SKVOZNJAK - 18.12.2004 16:18 |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 9:28 |