Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Архивирование на VB Добавлено: 12.05.07 12:44  

Автор вопроса:  someone | Web-сайт: 123
Всем привет снова.
Может быть у кого то завалялись сорцы архиватора на VB?
HCompress не предлагать - мне надо заархивировать целую папку.
Chilikat ZIP триальный (а жаль).

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #1
Добавлено: 12.05.07 12:52
Да, и ещё. Триальное и большое не предлагать плз )) покатит способ превращения папки в файл и обратно. Всё что угодно, лишь бы юзер не смог открыть обычным файл-менеджером файл.

Ответить

Номер ответа: 2
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 12.05.07 13:00
Ну дык возьми и просто запихай в файл подряд все файлы из папки друг за другом, разделяя их какой нибудь последовательностью байтов.

Ответить

Номер ответа: 3
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #3 Добавлено: 12.05.07 13:02
Из справки по WinRAR
WinRAR допускает управление из командной строки. Общий синтаксис командной строки таков:

WinRAR <команда> -<ключ1> -<ключN> <архив> <файлы…> <@файл-список…> <путь для извлечения\>

команда Комбинация символов, определяющая действие, которое будет выполнять WinRAR.
ключ Ключи используются для определения специфических действий, степени сжатия, типа архива и пр.
архив Имя обрабатываемого архива.
файлы Имена обрабатываемых файлов.
файл-список Файлы-списки - это обычные текстовые файлы, содержащие имена файлов для обработки. Каждое имя файла должно быть указано на отдельной строке и начинаться с первой позиции строки. В файл-список допускается помещать комментарии, признак начала комментария - символы //. Например, для архивирования файлов *.txt из папки c:\work\doc, файлов *.bmp из папки c:\work\image и всех файлов из папки c:\work\misc можно создать backup.lst, содержащий следующие строки:c:\work\doc\*.txt //резервная копия текстовc:\work\image\*.bmp //резервная копия рисунковc:\work\miscПосле этого для архивирования достаточно будет выполнить команду:winrar a backup @backup.lstВ одной командной строке разрешается указывать как обычные имена или группы файлов для обработки, так и файлы-списки. Если не указаны ни файлы, ни файлы-списки, то подразумевается шаблон *.* (т.е. WinRAR обработает все файлы).
путь для извлечения Используется только с командами e и x и указывает папку, в которую нужно извлекать файлы. Если эта папка не существует, то она будет создана.

Ответить

Номер ответа: 4
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #4 Добавлено: 12.05.07 14:00
4 yxaxa Empro нужно архиватор, а не упаковщик

Ответить

Номер ответа: 5
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #5
Добавлено: 12.05.07 14:46
покатит способ превращения папки в файл и обратно. Всё что угодно, лишь бы юзер не смог открыть обычным файл-менеджером файл

Ответить

Номер ответа: 6
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #6 Добавлено: 12.05.07 14:55
Ну в РАРе на архив пароль задать можно, так что и архиватором не откроешь, не то что файлером

Ответить

Номер ответа: 7
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #7
Добавлено: 12.05.07 16:17
Рар платный. Бесплатно он позволяет только распаковывать.

Ответить

Номер ответа: 8
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #8 Добавлено: 12.05.07 22:10
Платный, да?
Ну тогда проще не упаковывать файлы, а просто XORить их содержимое.
Или, если всетаки надо чтобы файл был один, то в его начале хранить инфо о файлах (имя, смещение, размер[, CRC]). + Сами файлы

Ответить

Номер ответа: 9
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #9
Добавлено: 12.05.07 22:36
InfoZIP:
ftp://ftp.uu.net/pub/archiving/zip

Ответить

Номер ответа: 10
Автор ответа:
 Dark



Вопросов: 4
Ответов: 41
 Профиль | | #10 Добавлено: 13.05.07 04:31
В свое время написал модуль для создания архива без компресии:
"Arc.bas":

VB_Name = "Arc"
Option Explicit
Const FAT_SIZE = 50902
Public FatExp() As String
Public Sub AddArc(ArcName As String, fa As String, Optional Alias As String)
Dim fa_size As Long
Dim file_nums As Integer
Dim fat() As String
Dim i As Integer
Dim sum_size As Long
Dim add_pos As Long
Dim buf As String
Dim p As Long
Dim up As Integer
Dim r As Long
'Определяем есть ли архив?
On Error GoTo 10
Open ArcName For Input As #1
GoTo 20
10 Close #1
NewArc (ArcName)
20 Close #1
'Читаем FAT
Open ArcName For Random As #1 Len = 100
Get #1, 2, buf
file_nums = Val(buf)
ReDim fat(file_nums, 2)
up = 0 'Add
For i = 1 To file_nums
Get #1, i * 2 - 1, fat(i, 1)
Get #1, i * 2, fat(i, 2)
If fat(i, 1) = fa Then up = i - 1 'Update
sum_size = sum_size + Val(fat(i, 2))
Next i
sum_size = sum_size - Val(fat(1, 2))
'Позиция первого байта нового файла в архиве
add_pos = FAT_SIZE + sum_size
If up <> 0 Then
'update
Close #1
'Extract files after fa
For i = up + 1 To file_nums
If fat(i, 1) <> fa Then r = ExtractArc(ArcName, fat(i, 1))
Next i
'set FILENUMS = up
Open ArcName For Random As #1 Len = 100
buf = str(up)
Put #1, 2, buf
Close #1
'move all without fa (рекурсия!)
For i = up + 1 To file_nums
AddArc ArcName, fat(i, 1)
If fat(i, 1) <> fa Then Kill fat(i, 1)
Next i
Else
'add
'Обновляем FAT
Open fa For Binary As #2
fa_size = LOF(2)
file_nums = file_nums + 1
buf = str(file_nums)
Put #1, 2, buf
If Alias <> "" Then
    Put #1, file_nums * 2 - 1, Alias
Else
    Put #1, file_nums * 2 - 1, fa
End If
buf = str(fa_size)
Put #1, file_nums * 2, buf
'Get #1, 4, buf
Close #1
'Дописываем
Open ArcName For Binary As #1
buf = String(fa_size, " ";)
'For p = 1 To fa_size
Get #2, 1, buf
Put #1, add_pos + 1, buf
'Next p
Close #1
Close #2
End If
End Sub
Public Function ListArc(ArcName As String) As Integer
Dim file_nums As Integer
Dim i As Integer
Dim buf As String
'Определяем есть ли файл?
On Error GoTo 10
Open ArcName For Input As #1
Close #1
GoTo 20
10 ListArc = 0
GoTo 30
20 'Читаем FAT
Open ArcName For Random As #1 Len = 100
Get #1, 2, buf
file_nums = Val(buf)
ReDim FatExp(file_nums - 1, 2)
For i = 2 To file_nums
Get #1, i * 2 - 1, FatExp(i - 1, 1)
Get #1, i * 2, FatExp(i - 1, 2)
Next i
Close #1
ListArc = file_nums - 1
30 End Function
Public Function ExtractArc(ArcName As String, fa As String) As Long
Dim fa_size As Long
Dim file_nums As Integer
Dim fat() As String
Dim i As Integer
Dim buf As String
Dim p As Long
Dim sum_size As Long
Dim add_pos As Long
'Определяем есть ли архив?
On Error GoTo 10
Open ArcName For Input As #1
GoTo 20
10 ExtractArc = 0
GoTo 200
20 Close #1
'Ищем запись о файле в FAT
Open ArcName For Random As #1 Len = 100
Get #1, 2, buf
file_nums = Val(buf)
ReDim fat(file_nums, 2)
sum_size = 0
For i = 1 To file_nums
Get #1, i * 2 - 1, fat(i, 1)
Get #1, i * 2, fat(i, 2)
If fat(i, 1) = fa Then GoTo 100
sum_size = sum_size + Val(fat(i, 2))
Next i
'Не нашли
ExtractArc = 0
Close #1
GoTo 200
'Нашли
100 sum_size = sum_size - Val(fat(1, 2))
Close #1
add_pos = FAT_SIZE + sum_size
'Extract
fa_size = Val(fat(i, 2))
On Error GoTo 250
Kill fa
250 Open ArcName For Binary As #1
Open fa For Binary As #2
buf = String(fa_size, " ";)
'For p = 1 To fa_size
Get #1, add_pos + 1, buf
Put #2, 1, buf
'Next p
Close #1
Close #2
ExtractArc = fa_size
200 End Function
Sub NewArc(ArcName As String)
Dim i As Integer
Open ArcName For Random As #1 Len = 100
Put #1, 1, "FILENUMS"
Put #1, 2, "1"
For i = 2 To 255
Put #1, i * 2 - 1, ""
Put #1, i * 2, ""
Next i
Close #1
End Sub
Public Function ExtractMem(ArcName As String, fa As String) As String
Dim fa_size As Long
Dim file_nums As Integer
Dim fat() As String
Dim i As Integer
Dim buf As String
Dim p As Long
Dim sum_size As Long
Dim add_pos As Long
'Определяем есть ли архив?
On Error GoTo 10
Open ArcName For Input As #1
GoTo 20
10 ExtractMem = ""
GoTo 200
20 Close #1
'Ищем запись о файле в FAT
Open ArcName For Random As #1 Len = 100
Get #1, 2, buf
file_nums = Val(buf)
ReDim fat(file_nums, 2)
sum_size = 0
For i = 1 To file_nums
Get #1, i * 2 - 1, fat(i, 1)
Get #1, i * 2, fat(i, 2)
If fat(i, 1) = fa Then GoTo 100
sum_size = sum_size + Val(fat(i, 2))
Next i
'Не нашли
ExtractMem = ""
Close #1
GoTo 200
'Нашли
100 sum_size = sum_size - Val(fat(1, 2))
Close #1
add_pos = FAT_SIZE + sum_size
'Extract
fa_size = Val(fat(i, 2))
On Error GoTo 250
250 Open ArcName For Binary As #1
buf = String(fa_size, " ";)
Get #1, add_pos + 1, buf
Close #1
ExtractMem = buf
200 End Function

Ответить

Номер ответа: 11
Автор ответа:
 Dark



Вопросов: 4
Ответов: 41
 Профиль | | #11 Добавлено: 13.05.07 04:33
Документация на модуль:
Модуль работы с псевдоархивом Arc.bas

Константы:
1. FAT_SIZE = 50902 – размер в байтах таблицы размещения файлов в псевдоархиве.
Функции:
1. Функция AddArc(ArcName As String, fa As String, Optional Alias As String)
Добавляет файл в псевдоархив. Если псевдоархив не существует, то он будет создан. Если файл с таким именем есть в псевдоархиве, то он будет замещен.
Входные параметры:
ArcName – имя файла псевдоархива.
fa – имя файла для добавления в псевдоархив.
Alias (необязательный параметр) – имя файла, которое будет записано в таблицу размещения файлов псевдоархива. Если отсутствует, то используется настоящее имя файла (fa).
2. Функция ListArc(ArcName As String) As Integer
Возвращает список файлов и их размер в псевдоархиве.
Входные параметры:
ArcName – имя файла псевдоархива.
Возвращает:
Количество файлов в псевдоархиве.
FatExp(n,2) As String – двумерный строковой массив размерности nx2. В первом столбце – имя файла, во втором – его размер в байтах.
3. Функция ExtractArc(ArcName As String, fa As String) As Long
Извлекает файл из псевдоархива.
Входные параметры:
ArcName – имя файла псевдоархива.
fa – имя файла для извлечения из псевдоархива.
Возвращает:
Размер извлеченного файла. Если псевдоархив или файл в псевдоархиве не существует, то возвращается 0.
4. Функция NewArc(ArcName As String)
Создает пустой псевдоархив.
Входные параметры:
ArcName – имя файла псевдоархива.
5. Функция ExtractMem(ArcName As String, fa As String) As String
Извлекает файл из псевдоархива в память.
Входные параметры:
ArcName – имя файла псевдоархива.
fa – имя файла для извлечения из псевдоархива.
Возвращает:
Содержимое извлеченного файла. Если псевдоархив или файл в псевдоархиве не существует, то возвращается пустая строка.

Структура псевдоархива
В модуле Arc.Bas описана константа FAT_SIZE = 50902 – размер в байтах таблицы размещения файлов в псевдоархиве.
Первые FAT_SIZE байт – заголовок (таблица размещения файлов в псевдоархиве). Структура таблицы – 255 полей по 100 байт. Первое поле - "FILENUMS", второе – количество файлов в псевдоархиве, начиная с 3: нечетные – имя файла, четные – размер файла в байтах. После таблицы (начиная с FAT_SIZE+1 байта) подряд идет содержимое файлов псевдоархива.
Структура полей формируются средствами языка VB 6.0 (метод Random работы с файлами).

Ответить

Номер ответа: 12
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #12
Добавлено: 13.05.07 15:09
Ну спс !

Ответить

Номер ответа: 13
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #13
Добавлено: 13.05.07 15:10
Оч. помогли ))) а то только на .NET я смотрю есть dll для работы с архивами.

Ответить

Номер ответа: 14
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #14
Добавлено: 13.05.07 15:35
По поводу arc.bas, а никак нельзя туда целую папку загнать?

Ответить

Номер ответа: 15
Автор ответа:
 Dark



Вопросов: 4
Ответов: 41
 Профиль | | #15 Добавлено: 14.05.07 04:42
Arc.bas сохраняет полные пути к файлам, поэтому если ты добавишь в такой архив файлы с разных папок, они корректно извлекутся в теже папки.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам