Искусственно увеличить размер файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Искусственно увеличить размер файла

Сообщение Maitris » 28.08.2005 (Вс) 23:18

Вот тут такая тема.. Надо увеличить размер файла до размера другого файла, точно в байтах. Причем сделать это программно, из проги на Vb.
Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении? И что насчет остальных типов файлов? :roll:
----

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Искусственно увеличить размер файла

Сообщение tyomitch » 29.08.2005 (Пн) 0:12

Maitris писал(а):Вот тут такая тема.. Надо увеличить размер файла до размера другого файла, точно в байтах. Причем сделать это программно, из проги на Vb.

Open For Append и вперёд.

Maitris писал(а):Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении?

Нули.
Maitris писал(а):И что насчет остальных типов файлов? :roll:

Каких?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 29.08.2005 (Пн) 0:30

Почему именно нули? Написать можно и vbNullChar.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.08.2005 (Пн) 1:29

BV писал(а):Почему именно нули? Написать можно и vbNullChar.

Дык, об этих нулях, которые '\0', и речь...


Расскажи лучше: ты картинку в подписи руками меняешь, или у тебя там автогенерилка?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 29.08.2005 (Пн) 2:21

Хе-хе, пока руками (пока). :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Re: Искусственно увеличить размер файла

Сообщение Kovu » 29.08.2005 (Пн) 11:11

tyomitch писал(а):
Maitris писал(а):Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении?

Нули.
[quote]
Ну ещё можно через Put запихивать что угодно :roll:
Если всё делать своими ручками, они скоро отвалятся !

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 14:02

Проще Seek до необходимого размера и Put один байт.
Программисты не глючат - глючат компиляторы...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.08.2005 (Пн) 14:11

А зачем Seek? Put можно сразу в произвольную позицию. Правда тогда хвост файла будет slack-ами забит, но я так понимаю, что автору это пофиг.
Lasciate ogni speranza, voi ch'entrate.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 14:44

alibek slack - это хто? нулями будет забит.
Программисты не глючат - глючат компиляторы...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2005 (Пн) 15:01

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

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 15:04

GSerg, неа, не мусором. А нули - это нули (CByte(0) - этим и будет забит каждый байт), проверь.
Программисты не глючат - глючат компиляторы...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.08.2005 (Пн) 15:26

CodeName33 писал(а):GSerg, неа, не мусором. А нули - это нули (CByte(0) - этим и будет забит каждый байт), проверь.

Я проверял.
Нули могут быть только на только что купленном винте.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.08.2005 (Пн) 15:31

Загрузчик Винды забивает в память нули после конца PE-образа.
Т.е. если добивать его нулями, то ничего не изменится.
А если всяким мусором (Kovu), то программа свалится, если ей там действительно были нужны нули.
Изображение

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 15:40

alibek Нули, вот код на забивку около 700 мегов

Код: Выделить всё
Open "C:\1.1" For Binary As #1
    Put #1, 700000000, CByte(0)
Close #1


И забивается чисто нулями - целиком и полностью, а это диск C, на который уже писалось - переписывалось по 1000 раз.

ГЫ! Прошлый код срабатывал мгновенно, а вот этот код,

Код: Выделить всё
Open "C:\1.1" For Binary As #1
    Put #1, 700000000, CByte(255)
Close #1


что странно работает ооооочень долго, поскольку VB видимо через WriteFile, самостоятельно нулями начинает забивать файл. Почему не ясно. :?:
Программисты не глючат - глючат компиляторы...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.08.2005 (Пн) 16:19

Код с CByte(254) срабатывает тоже медленно. Я угадал?

Первый пример сразу же ставит указатель конца файла на 700000000 байт.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 16:26

Amed, ну понятно, что 254 срабатывает тоже долго. И CByte(1) тоже долго. Быстро только CByte(0). Я и не знал, что VB проверяет записываемые в файл данные, и если 0 то он не заполняет нулями самостоятельно, а просто ставит указатель. Или это WriteFile так работает, а не VB? И случайно ли это, то что у меня файл даже при записи CByte(0) - состоит из нулей? (я вызывал делал так и раньше дома/на работе и всегда нули были)
Программисты не глючат - глючат компиляторы...

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 29.08.2005 (Пн) 17:24

CByte(0) проверил на всех файлах (exe, dll, jpg, doc и т.д), работает безупречно :) - пишет мгновенно, глюков никаких. Очень полезная вещь.
----


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

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

Сейчас этот форум просматривают: Google-бот и гости: 78

    TopList