Уменьшить файл

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

Уменьшить файл

Сообщение Yvlad » 09.03.2005 (Ср) 20:39

Своей прогой открываю (get) файл, убираю часть информации и сохраняю (put) файл. Но файл на диске остается прежней длины.
Есть ли "культурный" способ сохранять файл короче, без старой не нужной информации?
Спасибо!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 09.03.2005 (Ср) 20:57

У тебя случайно не APPEND стоит???
А вобщче код в студию!!!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 09.03.2005 (Ср) 20:58

Да кстати!!! Можно считать инфу, потом файлик похереть и заново создать его и записать туда новую инфу.

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

Сообщение Amed » 09.03.2005 (Ср) 21:02


neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Re: Уменьшить файл

Сообщение neic » 10.03.2005 (Чт) 15:29

Yvlad писал(а):Своей прогой открываю (get) файл, убираю часть информации и сохраняю (put) файл. Но файл на диске остается прежней длины.
Есть ли "культурный" способ сохранять файл короче, без старой не нужной информации?
Спасибо!

Код: Выделить всё
a = FreeFile
Open "сдесь путь к файлу" For Output as a ' Заменяем открывшийся       Print #a, "Кусок тескста которы хочешь сохранить" ' текст на этот кусок
Close #a                                                                             

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Re: Уменьшить файл

Сообщение neic » 10.03.2005 (Чт) 15:29

Yvlad писал(а):Своей прогой открываю (get) файл, убираю часть информации и сохраняю (put) файл. Но файл на диске остается прежней длины.
Есть ли "культурный" способ сохранять файл короче, без старой не нужной информации?
Спасибо!

Код: Выделить всё
a = FreeFile
Open "сдесь путь к файлу" For Output as a
Print #a, "Кусок тескста которы хочешь сохранить"
Close #a                                                                             

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

Сообщение alibek » 10.03.2005 (Чт) 15:42

Глупо.
Надо юзать SetEndOfFile.
Lasciate ogni speranza, voi ch'entrate.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 10.03.2005 (Чт) 16:18

Шурик писал(а):Да кстати!!! Можно считать инфу, потом файлик похереть и заново создать его и записать туда новую инфу.
Да, кстати, есть еще вариант: можно считать инфу, потом файлик похереть и... нечаянно зависнуть от пролитого пива на все, что можно.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 10.03.2005 (Чт) 16:39

vvs_adm писал(а):
Шурик писал(а):Да кстати!!! Можно считать инфу, потом файлик похереть и заново создать его и записать туда новую инфу.
Да, кстати, есть еще вариант: можно считать инфу, потом файлик похереть и... нечаянно зависнуть от пролитого пива на все, что можно.

А что тут такова???
Я пиво окуратно пью :wink: :)

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

Сообщение alibek » 10.03.2005 (Чт) 16:44

А уменьши мне файл с 3Гб до 2Гб?
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 10.03.2005 (Чт) 17:15

alibek, зря ты так... Щас ведь уменьшат! :lol:

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 10.03.2005 (Чт) 17:28

alibek писал(а):А уменьши мне файл с 3Гб до 2Гб?
Запускаем RAR с параметром сжатия бест и ложимся спать. Просыпаемся через два-три дня и смотрим, не завис ли комп. Если не завис, то смотрим, не сжался ли файл до 2Гб. Если сжался сильнее, чем до двух Гб, дописываем нулями. Если не сжался, громко матерясь, удаляем его нафиг, как файл, не заслуживающий нашего уважения. Хотя есть вариант перед удалением неправильного файла испробовать варианты с альтернативными архиваторами :wink:

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 11.03.2005 (Пт) 12:46

Поубирать лишние нолики. Тоесть анализируешь содержимое встречаешь нулевую последовательность и вместо нее пишешь
00 Lenght
К примеру:
AB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AB CD
можно записать как
AB 00 0E AB CD

В принципе можно и не только нолики. а любую последовательнось.
Примем 00 как служебный символ
AB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CD DD DD DD DD DD DD DD DD DD DD DD 00
Можно записать как
AB 00 00 0E CD 00 DD 0C 00 00 01

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 11.03.2005 (Пт) 13:03

Inferno писал(а):Поубирать лишние нолики. Тоесть анализируешь содержимое встречаешь нулевую последовательность и вместо нее пишешь
00 Lenght
К примеру:
AB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AB CD
можно записать как
AB 00 0E AB CD

Ты бы еще Хаффмона предложил, человеку нужно усечь файл до определенной длинны, на VB вроди бы можно только через API SetEndOfFile, но тогда лутше и писать в файл через WriteFile. Во многих языках аналогичные ф-ии встроены, может и в VB такое есть, но никто не сталкивался.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 15:17

Inferno писал(а):Поубирать лишние нолики.
Это наверное один из самых древних методов упаковки файлов ... Тогда, наверное, еще и компьютеров не было :) Ему же не надо файл упаковывать, ему хвостик отрезать :wink:

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 11.03.2005 (Пт) 15:25

Ну тогда вообще проблемы не вижу

function CutFile(ByVal FileName$, ByVal NcountBytes&)
Dim FileNum%
Dim Tbyte() as byte

FileNum=freefile
Redim Tbyte(NcountBytes)
Open FileName for binary as #FileNum
Get #FileNum,,Tbyte
close FileNum
FileNum=freefile

Open FileName for binary as #FileNum
Put #FileNum,,Tbyte
close FileNum

end function

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

Сообщение alibek » 11.03.2005 (Пт) 16:13

Опять двадцать пять...
А если файл больше 2Гб размером?
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.03.2005 (Пт) 16:21

alibek писал(а):Опять двадцать пять...
А если файл больше 2Гб размером?


А при чем тут именно 2Gb? Физическая память наверняка у многих быстрей исчерпается - у меня вон ее всего-навсего 1Gb, а у кого-то, и все 8Mb...

Способ старый как мир - кусочками разумного размера все сваливаем в новый файл, старый удаляем и переименовываем.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.03.2005 (Пт) 16:47

Да, в отдельных случаях можно пользовать API-шную функцию SetFileValidData, но осторожно - вначале нужно прочитать про ее ограничения.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 16:54

alibek писал(а):Надо юзать SetEndOfFile.
Ну все же уже... Чё вы мучаетесь, кусочками, хреночками...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 16:57

Andrey Fedorov писал(а):старый удаляем и переименовываем.
Ошибка переименования файла! Данного файла отныне не существует!! Компьютер перезагрузится через 3... 2... 1... Фсе :lol:

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.03.2005 (Пт) 17:04

vvs_adm писал(а):
alibek писал(а):Надо юзать SetEndOfFile.
Ну все же уже... Чё вы мучаетесь, кусочками, хреночками...


А, верно, SetFileValidData это несколько иное - сейчас повнимательней прочитал...

P.S
Просто ни разу не приходилось отрезать именно конец файла - обычно что-то посложней делается, поэтому необходимости особой заюзать данную функцию не было... Потому и кусочками - при более сложных операциях иначе все одно никак.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 17:09

alibek писал(а):Глупо. Надо юзать SetEndOfFile.
Вообще-то поторопился я... Если вернуться к первому посту и внимательнее его прочитать, то получается, что ему не надо хвостик отрезать, ему может быть часть из середины вырезать надо. Так что и вправду придется кусочками-хреночками :lol:

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.03.2005 (Пт) 17:12

Ну почему - кусочками сдвигаем/сжимаем информацию в том-же самом файле, а потом делаем ему обрезание с помощью SetEndOfFile.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 17:22

Торможу... Наоборот, я второй раз неправильно прочитал :) Он же уже все с файлом сделал...
открываю (get) файл, убираю часть информации и сохраняю (put) файл
Только SetEndOfFile и осталось. Хотя конечно без
А вобщче код в студию
и без стакана не совсем ясно :lol:

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 11.03.2005 (Пт) 21:22

Открыл 2 файла- один на чтение другой на запись.Одновременно с одного файла считываешь в другой записывашь. Потом 1 файл грохаешь а второй переименовываешь.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.03.2005 (Пт) 22:02

Inferno писал(а):Открыл 2 файла- один на чтение другой на запись.Одновременно с одного файла считываешь в другой записывашь. Потом 1 файл грохаешь а второй переименовываешь.
Не, не так. Потом 1 файл грохаешь и проливаешь пиво на клаву... Не, на системник :lol:

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

Сообщение alibek » 14.03.2005 (Пн) 9:15

В файле помимо его содержимого есть метаинформация (даты создания/изменения, атрибуты, разрешения и прочее). При создании нового файла эта информация не переносится. Причем часть метаинформации в принципе нельзя скопировать в другой файл, поэтому этот способ неверен в корне.
Если надо урезать файл, то надо юзать SetEndOfFile.
Lasciate ogni speranza, voi ch'entrate.

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 14.03.2005 (Пн) 14:22

А если нужно выкинуть середину а не конец. Вообще-то автор потерялся и вобщем для меня осталось загадкой, а чего же он всетаки хотел :))

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

Сообщение alibek » 14.03.2005 (Пн) 14:43

Если надо вырезать середину, то конец файла переносится в середину и затем файл обрезается.
Lasciate ogni speranza, voi ch'entrate.

След.

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

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

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

    TopList