വിഷ േബസി ിലെട ആചീവ് െമയ്
ആചീവക എേകകാവരായി ആം ഉ!ാവില " . ഒ %&ം ഫയലകെള ഒ)െക&ായി സ*ി+, വിദ. ് നമ ് ആചീെവ വിളി ാം. വളെര 0ശസ് തമായ ഒ ആചീവിങ് േസാഫ " ാ ‘വി8സി9് ’. ഫയലകെള ഇ<െന ഒ)ഫയലാ ി 4 ് െവയറാണേല ഉപേയാഗി ാനായാ ഫയ ?ാ8സാ*് 8സ് സ ഖമമായി നടാനാവം. വിഷ േബയ് സി ് ഉപേയാഗിAെകാ!് എ<ിെന ഒ േഫാഡ ആചീവ് െചCാ8 സഹായി+, െ0ാEാം ഉ!ാ ാെമ േനാ ാം. ആദ.മായി വിഷ േബയ് സി ് Fറ,് ഫയ ആചീവ് എ,േപരി ഒ േ0ാEാം Fട<ാം.േഫാമിേല ് താെഴ കാH,േപാെല ഒ െടക I ് )് േബാക I ് (textDir), മ ബ&Hക(cmdOrdner,makeArchiv,cmdExtractArchiv),േകാേ^ാേബാക I ് (cmbPattern),പി ക് ചേബാക I ് (picProgress),ഒ േകാമe ഡയേലാഗകeേ?ാ എ,ിവ േഫാമിേല ് േച+ക.
വിേfാസി െപാFവായി ഉപേയാഗി െപട, ജാലക<ളാണ് േകാമe ഡയേലാഗ് എ,റിയെ9ട,ത് .ഉദാഹരണമായി, േഫാ!് ഡയേലാഗ് ,0ിf് ഡയേലാഗ് ,കള ഡയേലാഗ് എ,ിവ. േകാമe ഡയേലാഗ് കe േ?ാ വഴി ഇവ നhെട േ0ാജക 4 ിേല ് െകാ!വരാനാവം.േകാമe ഡയേലാഗ് േകാ^ണ8സ് വിേfായി നിം 4 ിനിം Microsoft Common Dialog Control 6 േചേ !F!് . േകാ^ണ8സ് ലിസ ടി ് െചയ് ത് ഒെക െചCക.(ട േബാക " ി ് െചയ് ത് േകാ^ണ8സ് I ിെf ൈറ)് ബ&e ക
വിേfാ വാം അെല " pി Ctrl+T ഉപേയാഗി ാം) *േഫാം 0വി9ി+േ^ാ ഈ കeേ?ാ കാണാനാവില " .ഇനി ആചീവ് തCാറാ ാuv ഫങ് ഷuകളം യസ ഡിൈഫ8ഡ് ൈട9കളം ഉ!ാ ാം. ഇെതാ െമാഡ.ളിലാണ് െചേC!ത് . 0ധാനെ9& േവരിയബിളകളെട ഉപേയാഗം വിശxീകരിAിരി+,ത് 0േത.കം yxി+ക. Private Const MAX_PATH = 260 Private Type BrowseInfo hWndOwner As Long pIDLRoot As Long ‘ആദ.െ േഫാഡറിെf സാനം െസ)് െചCാ8 pszDisplayName As Long ‘െസലക് ട് െചയ് ത് േഫാഡറിെf േപര് സ് േ)ാ െചC,തിന് . lpszTitle As Long
.
ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long േഫാഡറിെf ഐ e കാണി+,തിന് . End Type
4 ം ൈട9ായ BrowseInfo േഫാഡ ൌസറിെf േകാeഫിഗേറഷuേവ!ിയാണ് കസ 4 f് ഫ ഉ!ാ െ9&ിvത് . ഇനി ൌസ് േഫാഡ ഫങ് ഷ് uേവ! മ) േകാeസ " ാകളം ഫങ് ഷuകളം ഡിക " യ െചCാം. 4 ം ഒബ് ജക 4 ം െന)് വ ിെല കം^.&റ ക,0ിfറ ക,ഫയ സിസ 4 ക,ഫയ സിസ 4 ാ)സ് ബാ എ,ി കാണി+,തിനാവശ.മായ ഫ േഫാഡറ ക,ഫയലക,സ " ാകളാണ് ആദ.മായി െസ)െചCാuvത് . Private Const BIF_BROWSEFORCOMPUTER = &H1000 Private Const BIF_BROWSEFORPRINTER = &H2000 Private Const BIF_BROWSEINCLUDEFILES = &H4000 Private Const BIF_DONTGOBELOWDOMAIN = &H2 Private Const BIF_RETURNFSANCESTORS = &H8 Private Const BIF_RETURNONLYFSDIRS = &H1 Private Const BIF_STATUSTEXT = &H4
ഇനി േഫാഡ ൌസ് െചCാuv ൈലറി ഫങ് ഷuകളം, െമhറി സ തമാ ാuv ഫങ് ഷuകളം േച് ഡിക " േറഷ8 പണ മാ ാം. Private Declare Sub CoTaskMemFree Lib "ole32.dll" _ (ByVal hMem As Long) Private Declare Function lstrcat Lib "kernel32" Alias _ "lstrcatA" (ByVal lpString1 As String,ByVal lpString2 As String) As Long Private Declare Function GetActiveWindow Lib "user32" () As Long Private Declare Function SHGetPathFromIDList Lib "shell32"(ByVal pidList As Long, ByVal lpBuffer As String) As Long Private Declare Function SHBrowseForFolder Lib "shell32"(lpbi As BrowseInfo) As Long ഇനി ൌസ് േഫാഡ ഫങ് ഷെf േശഷി+, ഭാഗ< േച ാം. Public Function BrowseForFolder(Prompt As String) As String Dim n As Integer Dim IDList, Result ,As Long Dim ThePath As String Dim BI As BrowseInfo ഫയ സ് ?ക് ച ഉ!ാ+,തിനാണ് താെഴ കാH, േകാഡ് ഉപേയാഗിAിരി+,ത് . With BI .hWndOwner = GetActiveWindow() .lpszTitle = lstrcat(Prompt, "") .ulFlags = BIF_RETURNONLYFSDIRS End With IDList = SHBrowseForFolder(BI)
4 ് 0 അധികമാെണpി െസക് ട് െചയ് ത ഭാഗം എഡി)് െചC,തിനായി ഐഡി ലിസ താെഴ കാH, ഭാഗം ഉപേയാഗിAിരി+. If IDList Then െമhറിസ^ി+, വിവര< ലഭി+,തിന് . ThePath = String$(MAX_PATH, 0)
Result = SHGetPathFromIDList(IDList, ThePath)
IID-List െന പാായി െസ)െചC,തിന് .
IDList നിം െമhറി ¢ീ ആ+,തിന് . Call CoTaskMemFree(IDList) ‘എല " ാ ൈബ)കേളയ ം പണ മായ ം നീ ം െചCാ8 n = InStr(ThePath, vbNullChar) If n Then ThePath = Left$(ThePath, n - 1) End If BrowseForFolder = ThePath End Function
േഫാഡ ൌസ് െചCാuv ഫങ് ഷെf ഭാഗം ഇവിെട പരണ മാ£.ഇനി േഫാമിേല ് േശഷി+, ഭാഗം %ടി േച ാവ,താണ് .േഫാമിെf േലാഡ് ഇവfിേല ് താെഴ കാH,േകാഡ് േച ാം. Private Sub Form_Load() cmbPattern.AddItem "*.*" cmbPattern.ListIndex = 0 End Sub ഇനി cmdOrdner െf ക " ി ് ഇവ് fി നിം േഫാഡ െസലക 4 ് െചCാനായി ഉ!ാ ിയ BrowseForFolder ഫങ് ഷെന വിളി ാം Private Sub cmdOrdner_Click() Dim sOrdner As String sOrdner = BrowseForFolder("Select a directory:") If sOrdner <> "" Then txtDir.Text = sOrdner End If End Sub
ആചീവ് ഫയലക േസവ് െചCാuം, നിലവിലvവ എക I ് ?ാ)് െചCാuമv I ് കാണി+,തിനായി ഫങ് ഷ് uക ഉ!ാേ !F!് ,ഇF%ടാെത ഇതിെf േ0ാEസ I ് ബാറിേല ് വാല. െകാട+,തിuv േകാഡം േചേ !F!് .ഇെതാ േ0ാEസ ഫങ് ഷെf §പിെലഴ താം,െമാഡ.ളിേലാ േഫാമിേലാ ഇF േച ാവ,താണ് .
Public Function SaveFilesToArchiv( _ ByVal sPath As String, ByVal sArchiv As String,Optional ByVal sPattern As String = "*.*") As Long Dim F ,n, nLenFileName, As Integer Dim nLenFileData, nFiles,I,ngUBound,l As Long Dim DirName ,FileData ,File() As String If Right$(sPath, 1) <> "\" Then sPath = sPath + "\" ഡയറക " ാ ഫയലകളം ലഭ.മാ+,തിന് . 4 റിയി നിം എല nFiles = 0 DirName = Dir(sPath & sPattern, vbNormal) While DirName <> "" If DirName <> "." And DirName <> ".." Then nFiles = nFiles + 1 If nFiles > lngUBound Then lngUBound = 2 * nFiles ReDim Preserve File(lngUBound) File(nFiles) = DirName End If DirName = Dir Wend ReDim Preserve File(nFiles) If Dir(sArchiv) <> "" Then Kill sArchiv ആചീവ് ഫയ നിലവിലെ!pി അത് ഡിലീ)് െചC,തിന് . ആചീവിേല ് ഫയലക േസവ് െചCാ8. F = FreeFile Open sArchiv For Binary As #F Put #F, , nFiles For I = 1 To nFiles nLenFileName = Len(File(I)) Put #F, , nLenFileName
Put #F, , File(I) n = FreeFile Open sPath + File(I) For Binary As #n FileData = Space$(LOF(n)) Get #n, , FileData Close #n nLenFileData = Len(FileData) Put #F, , nLenFileData Put #F, , FileData ShowProgress picProgress, I, 1, nFiles DoEvents Next I Close #F SaveFilesToArchiv = nFiles End Function ഫയലക ഔ&് പ&് േഫാഡറിേല ് എക I ് ?ാ)് െചCാ8.
Public Function ExtractFilesFromArchiv( ByVal sArchiv As String,ByVal sDestDir As String) As Long Dim F, n, nLenFileName As Integer Dim nLenFileData, nFiles, I As Long Dim FileData ,File, DirName As String ആചീവ് നിലവിലേ!ാ എ പരിേശാധി ാ8. If Dir(sArchiv) = "" Then MsgBox "The archive does not exist!", 16 Exit Function End If If Right$(sDestDir, 1) <> "\" Then sDestDir = sDestDir + "\" F = FreeFile Open sArchiv For Binary As #F ആചീവിലv ഫയലകളെട എണ ം കെ!ാ8. Get #F, , nFiles For I = 1 To nFiles Get #F, , nLenFileName File = Space$(nLenFileName) Get #F, , File Get #F, , nLenFileData FileData = Space$(nLenFileData) Get #F, , FileData n = FreeFile Open sDestDir + File For Output As #n Print #n, FileData; Close #n ShowProgress picProgress, I, 1, nFiles
DoEvents Next I Close #F ExtractFilesFromArchiv = nFiles End Function Private Sub ShowProgress(picProgress As PictureBox, _ ByVal Value As Long, ByVal Min As Long, ByVal Max As Long,Optional ByVal bShowProzent As Boolean = True) Dim pWidth As Long, intProz As Integer, strProz As String Const progBackColor = &HC00000 Const progForeColor = vbBlack Const progForeColorHighlight = vbWhite If Value < Min Then Value = Min If Value > Max Then Value = Max If Max > 0 Then intProz = Int(Value / Max * 100 + 0.5) Else intProz = 100 End If With picProgress If .AutoRedraw = False Then .AutoRedraw = True picProgress.Cls If Value > 0 Then pWidth = .ScaleWidth / 100 * intProz picProgress.Line (0, 0)-(pWidth, .ScaleHeight), _ progBackColor, BF If bShowProzent Then
strProz = CStr(intProz) & " %" .CurrentX = (.ScaleWidth - .TextWidth(strProz)) / 2 .CurrentY = (.ScaleHeight - .TextHeight(strProz)) / 2 If pWidth >= .CurrentX Then .ForeColor = progForeColorHighlight Else .ForeColor = progForeColor End If picProgress.Print strProz End If End If End With End Sub
CmdMakeArchiv ബ&നിേല ് ആചീവ!ാ+,തിനാവശ.മായ േകാഡ് േച ാം.
Private Sub cmdMakeArchiv_Click() Dim nFiles As Long On Local Error Resume Next With CommonDialog1 .CancelError = True .Filter = "Archive (*.dat)|*.dat" .DefaultExt = ".dat" .ShowSave If Err = 0 Then picProgress.Visible = True ആചീവിേല ് ഫയലക േസവ് െചCാ8. nFiles = SaveFilesToArchiv(txtDir.Text, _ .FileName, cmbPattern.Text) picProgress.Visible = False ആചീവ് െചയ് ത് ഫയലകളെട എണ ം കാണി+,തിന് . MsgBox nFiles & " stored in " & .FileName, 64 End If End With End Sub
Fട,് ആചീവ് ഫയലക Fറ+,തിനാവശ.മായ േകാഡം േച് െ0ാEാം പണ മാ ാം. Private Sub cmdExtractArchiv_Click() Dim nFiles As Long Dim sPath As String On Local Error Resume Next With CommonDialog1
.CancelError = True .Filter = "Archiv-Datei (*.dat)|*.dat" .ShowOpen If Err = 0 Then sPath = BrowseForFolder("Please select the directory to extract to:") If sPath <> "" Then picProgress.Visible = True nFiles = ExtractFilesFromArchiv(.FileName, sPath) picProgress.Visible = False MsgBox nFiles & " files extracted to " & sPath, 64 End If End If End With End Sub ആചീവ് േ0ാEാം തCാറാ+,തിuv േ0ാEാം ഇവിെട പണ മാ£.ഫയലക ആചീവായി ഉപേയാഗി+േ^ാ നമ ് ഡിസ് ക് സ് േപയ് സ ം ലാഭി ാuമാവം.
പരിശീലനിനായി 1. 2. 3. 4.
േ0ാEാമിേല ് ടബാ െമuബാ എ,ിവ േച+ക. േ0ാEാമിനക് ൈറ)് ബ&e ക " ി ി വ, ഒ േപാപ് അ9് െമu നിhി+ക. േപാ9് അ9് െമuവ ആചീവ് ഉ!ാ ാuം,എക I ് ?ാ)് െചCാuമv കമാfക ന£ക. േലബ,¢യിം കeേ?ാളക ഉപേയാഗെ9ടിെകാ!് അഡ ാ8സ് ഡ് ട ടി9് േച+ക.