Формирование списка файлов с последующей упаковкой в архив - VB
Формулировка задачи:
Подскажите код для формирование списка файлов с последующей упаковкой в архив.
Тип файлов не важен, например /txt.
Возможно ли решать эту задачу если на пк пользователя нет архиватора.
Желательно, чтобы прога запускалась по нажатию на кнопку.
Тип файла и место конечного архива указаны заранее...хотя все это не принципиально.
Решение задачи: «Формирование списка файлов с последующей упаковкой в архив»
textual
Листинг программы
Option Explicit ' Alex Averchenkoff принадлежит оригинальный код BAT программы MakeCab. ' Dragokas перевел программу на язык Visual Basic 6. ' Dark_Timur исправил и дополнил программу. ' Версия: 1.1 Function CreateCab(Source As String, SourceType As String, ArchName As String, Destination As String, Compress As Boolean, _ CompressLvl As Byte, SubFolders As Boolean, Ext As String, SFX As Boolean, Silent As Boolean) As Long Dim AddData As String, DDF As String If LCase(SourceType) = "d" Or LCase(SourceType) = "dir" Or LCase(SourceType) = "directory" Then AddData = GetData(Source, True, LCase(Ext), Silent) ElseIf LCase(SourceType) = "f" Or LCase(SourceType) = "file" Then AddData = """" & Source & """" & vbCrLf Else If Not Silent Then MsgBox "Неправильно задан тип исходных данных", vbCritical CreateCab = 272 End Function End If If (Err <> 0) Then Exit Function DDF = GetTempFile() 'DDF будет во временной папке Windows CreateDDF DDF, ArchName, AddData, Destination, IIf(Compress, "ON", "OFF"), CompressLvl With CreateObject("WScript.Shell") CreateCab = .Run("makecab.exe /F " & DDF, 0, True) If (CreateCab <> 0) Then If Not Silent Then MsgBox "Ошибка создания архива (" & CreateCab & ")", vbCritical Exit Function End If If SFX Then 'Превращаем обычный архив в SFX .Run "cmd /x /c ""copy /b """ & Environ("windir") & "\system32\extrac32.exe""+""" & _ Destination & "\" & ArchName & ".cab"" """ & Destination & "\" & ArchName & ".exe""""", 0, True Kill Destination & "\" & ArchName & ".cab" End If End With Call Clear(DDF) If Not Silent Then MsgBox "Готово.", vbInformation End Function Function GetData(fold As String, SubFolders As Boolean, Ext As String, Silent As Boolean) As String On Error Resume Next 'Пропуск папок/файлов, защищенных правами Dim myfiles As Object, mydirs As Object Dim fil As Object, dir As Object With CreateObject("Scripting.FileSystemObject").GetFolder(fold) Set myfiles = .Files Set mydirs = .SubFolders End With For Each fil In myfiles If Trim(Ext) = "*" Or Trim(Ext) = "*.*" Or Trim(Ext) = "" Or (LCase(Right(fil.Name, Len(Ext)))) = Ext Then GetData = GetData & """" & fil.Path & """" & vbCrLf End If Next If SubFolders Then For Each dir In mydirs GetData = GetData & ".Set DestinationDir=" & Chr(34) & dir.Name & Chr(34) & vbCrLf & _ GetData(dir.Path, True, Ext, Silent) & vbCrLf Next End If GetData = Left(GetData, Len(GetData) - 2) 'CrLf Set myfiles = Nothing: Set mydirs = Nothing End Function Function GetTempFile() 'Получить временный незанятый файл Dim FSO As Object, FN As String Set FSO = CreateObject("Scripting.FileSystemObject") FN = FSO.GetTempName() FN = Environ("temp") & "\" & FN If dir(FN) <> vbNullString Then FN = GetTempFile() GetTempFile = FN Set FSO = Nothing End Function Function CreateDDF(DDF$, ArchName, GetData$, Out, SetCom As String, SetComLvl As Byte) Dim ff As Integer ff = FreeFile() 'Подготовим DDF-файл ответов для архиватора CAB Open DDF For Output As #ff Print #ff, ".Set CabinetNameTemplate=" & ArchName & ".cab" Print #ff, ".Set CompressionType=MSZIP" Print #ff, ".Set MaxDiskSize=CDROM" Print #ff, ".Set ReservePerCabinetSize=6144" Print #ff, ".Set Compress=" & SetCom Print #ff, ".Set CompressionMemory=21" Print #ff, ".Set DiskDirectoryTemplate="".""" Print #ff, ".Set Cabinet=ON" Print #ff, ".Set UniqueFiles=ON" If LCase(SetCom) = "on" Then Print #ff, ".Set CompressionLevel=" & CStr(SetComLvl) Print #ff, ".Set DiskDirectory1=" & Out Print #ff, GetData Close #ff End Function Sub Clear(DDF$) On Error Resume Next Kill Environ("temp") & "\setup.inf" Kill Environ("temp") & "\setup.rpt" Kill DDF End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д