работа с бинарными файлами

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

работа с бинарными файлами

Сообщение v-adix » 04.06.2003 (Ср) 13:46

если даже переписать весь файл в другой "по-байтным" методом, то файл, который в результате получается, больше исходного на несколько байтов. с чем это связано?

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 04.06.2003 (Ср) 13:57

в конец файла добавляется 2 байта - обозначает конец файла
Ничто так не ограничивает полёт мысли программиста, как компилятор

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.06.2003 (Ср) 14:03

Поправка - EOF это один байт, равен chr(26) :)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 04.06.2003 (Ср) 16:09

если переписать весь файл в другой "по-байтным" методом
то получится в точности такой же файл. Ошибка где-то в алгоритме. Например:
For n=0 to Len(File1)
get#File1,,Byte1
put#File2,,Byte1
Next n
даст прирост на 1 байт, так как нужно:
For n=1 to Len(File1)
либо:
For n=0 to Len(File1)-1

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.06.2003 (Ср) 16:34

Да вы небось через стринг переносите?????
Понятное дело, Unicode...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 04.06.2003 (Ср) 18:35

понятно...
тоесть, надо делать не так:

For i = 1 to FileLen(исходныйфайл)

a так:

for i = 1 to FileLen(исходныйфайл) - 1

чтобы не переписать EOF из исходного файла в свой (да и ещё свой добавить). я правильно понял?

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 04.06.2003 (Ср) 21:46

нет, у тебя в файле n символов значит ты должен устроить for от 1 до n или от 0 до n-1

то есть For i = 1 to FileLen(исходныйфайл) - правильно :!:
Ничто так не ограничивает полёт мысли программиста, как компилятор

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

Сообщение ShadowCaster » 04.06.2003 (Ср) 22:01

Используй следующее:

Sub CopyF(f1, f2)
dim b as byte ' Ты на верное забыл объявить его байтом

open f1 for binary as #1
open f2 for binary as #2

do until lof(1)+1<=seek(1)
get #1,,b
put #2,,b
loop
close #1, #2
end sub

или:

Sub CopyF2(f1, f2)
dim s as string

open f1 for binary as #1
s = space(lof(1))
get #1,,s
close #1
open f2 for binary as #1
put #1,,s
close #1
end sub

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 05.06.2003 (Чт) 10:33

всё работает
спасибо


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 62

    TopList