задать размер файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
zlaya
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 10.07.2006 (Пн) 16:02

задать размер файла

Сообщение zlaya » 26.07.2006 (Ср) 9:28

Добрый день!
Подскажите, можно ли в VB скомпилировать файл точно заданного размера (с точностью до байта)?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2006 (Ср) 9:40

если имеется ввиду PE-файл (т.е. EXE, DLL, OCX и прочее) то, ествественно размер нельзя сделать меньше чем он есть, но а если требуется увеличить размер то нужно просто дописать в конец файл Chr(0)
Причём столько раз - сколько требуется.

Вот код:
Код: Выделить всё

Sub SetFileSize(Byval sFileName As String, byval lFileSize)
Dim hFile As Long
hFile = FreeFile()
Open sFileName For Binary as #hFile
Select Case LOF(hFile)
   Case Is < lFileSize
     Put #hFile, LOF(hFile)+1, Space(lFileSize - LOF(hFile))
     Close #hFile
   Case lFileSize
    'Файл и так имеет нужный размер - ничего не делаем.
   Case Is > lFileSize
   err.Raise 5,,"Желаемый размер файла меньше реального."
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

zlaya
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 10.07.2006 (Пн) 16:02

Сообщение zlaya » 26.07.2006 (Ср) 10:02

Спасибо, Хакер
Идея вроде ясна. (правда если я передаю lFileSize как integer, то файл получается больше заданного на 4 байта)

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

Сообщение tyomitch » 26.07.2006 (Ср) 10:03

SetEndOfFile не проще?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2006 (Ср) 10:26

Неа. В АпиГуиде её нет, поэтому надо самому догадываться, как она работает. А тут сам пишешь, сам знаешь что делаешь и как это будет работать...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

zlaya
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 10.07.2006 (Пн) 16:02

Сообщение zlaya » 26.07.2006 (Ср) 10:38

tyomitch
SetEndOfFile не проще?


А примерчик можно?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.07.2006 (Ср) 10:46

пример писать лениво, но последовательность вызовов такова:

CreateFile 'открываем файл
SetFilePointer 'устанавливаем указатель в нужную позицию
SetEndOfFile 'устанавливаем длину файла=позиции указателя
CloseHandle 'закрываем файл


Это все API-функции, подробности в MSDN. Или методом Хакера.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение tyomitch » 26.07.2006 (Ср) 11:44

Хакер писал(а):Неа. В АпиГуиде её нет, поэтому надо самому догадываться, как она работает.

Да ну прямо? http://www.mentalis.org/apilist/SetEndOfFile.shtml
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2006 (Ср) 12:02

tyomitch писал(а):
Хакер писал(а):Неа. В АпиГуиде её нет, поэтому надо самому догадываться, как она работает.

Да ну прямо? http://www.mentalis.org/apilist/SetEndOfFile.shtml


Я имел ввиду в локальной версии. Т.е. в проге а не на каком то сайте. Я денег не наберусь залить по сайтам, ради описания 1-ой апишки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 26.07.2006 (Ср) 12:06

Хакер писал(а):
tyomitch писал(а):
Хакер писал(а):Неа. В АпиГуиде её нет, поэтому надо самому догадываться, как она работает.

Да ну прямо? http://www.mentalis.org/apilist/SetEndOfFile.shtml


Я имел ввиду в локальной версии. Т.е. в проге а не на каком то сайте. Я денег не наберусь залить по сайтам, ради описания 1-ой апишки.
На локальной версии далеко не уедешь... :wink:
А я все практикую лечение травами...

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

Сообщение tyomitch » 26.07.2006 (Ср) 12:07

andreymp писал(а):
SetEndOfFile 'устанавливаем длину файла=позиции указателя
не совсем так.
SetEndOfFile - переводит текущую позицию в конец открытого файла. (Д.Эпплман)

Покажи конкретный источник цитаты. Потому что это бред. Даже для Аппельмана.

andreymp писал(а):SetFilePointer - не работает с файлами более 2^64 байт.

Файлов длиннее 2^64 байт не бывает в природе.
Изображение

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

Сообщение tyomitch » 26.07.2006 (Ср) 12:09

Хакер писал(а):Я имел ввиду в локальной версии. Т.е. в проге а не на каком то сайте. Я денег не наберусь залить по сайтам, ради описания 1-ой апишки.

Удобная позиция. "Мне влом учиться, поэтому мне этого не нужно." :-?
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 26.07.2006 (Ср) 12:10

andreymp писал(а):
SetEndOfFile 'устанавливаем длину файла=позиции указателя
не совсем так.
SetEndOfFile - переводит текущую позицию в конец открытого файла. (Д.Эпплман)
http://www.allapi.net/apilist/SetEndOfFile.shtml писал(а):The SetEndOfFile function moves the end-of-file (EOF) position for the specified file to the current position of the file pointer.
Так что ты не прав...
Последний раз редактировалось Twister 26.07.2006 (Ср) 12:12, всего редактировалось 1 раз.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2006 (Ср) 12:12

tyomitch
Выкладывая 200-300 у.е. каждый месяц за инет, ты бы наверное понял меня.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 26.07.2006 (Ср) 12:14

Хакер писал(а):tyomitch
Выкладывая 200-300 у.е. каждый месяц за инет, ты бы наверное понял меня.
Ну хватит вам, горячие финские парни... :?
А я все практикую лечение травами...

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

Сообщение tyomitch » 26.07.2006 (Ср) 13:28

andreymp, на всякий случай страницу скажи: у меня дома эта книга есть.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2006 (Ср) 14:50

Посмотрел на свой код со стороны - обнаружил что он тупой :lol:

Вот новая версия

Код: Выделить всё
Sub SetFileSize(Byval sFileName As String, byval lFileSize)
Dim hFile As Long
hFile = FreeFile()
Open sFileName For Binary as #hFile
Select Case LOF(hFile)
   Case Is < lFileSize
     Put #hFile, lFileSize, CByte(0)
     Close #hFile
   Case lFileSize
    'Файл и так имеет нужный размер - ничего не делаем.
   Case Is > lFileSize
   err.Raise 5,,"Желаемый размер файла меньше реального."
End Sub

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение tyomitch » 26.07.2006 (Ср) 16:19

andreymp писал(а):стр.784

Да, действительно.
А в оригинале:
Sets the current file position to be the end of file for an open file.

Переводчику низачот, подчёркнутое мной слово не заметил.
Изображение


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

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

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

    TopList  
cron