You are on page 1of 12

വിഷ േബസി

ില െട ആചീവ് െമയ് 

ആചീവക എേകകാവരായി ആം ഉ!ാവില " . ഒ %&ം ഫയലകെള


ഒ)െക&ായി സ *ി+, വിദ. ് നമ ് ആചീെവ വിളി ാം. വളെര 0ശസ് തമായ
4 ് െവയറാണേല
ഒ ആചീവിങ് േസാഫ " ാ ‘വി8സി9് ’. ഫയലകെള ഇ<െന ഒ)ഫയലാ ി
ഉപേയാഗി ാനായാ ഫയ ?ാ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ായി നിം
േചേ !F!് . േകാ^ണ8സ് ലിസ 4 ിനിം Microsoft Common Dialog Control 6
ടി ് െചയ് ത് ഒെക െചCക.(ട  േബാകI ിെf ൈറ)് ബ&e ക" ി ് െചയ് ത് േകാ^ണ8സ്
വിേ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ാം.

െന)് വ ിെല കം^. &റ ക,0ിfറ ക,ഫയ സിസ4 ം ഒബ് ജക


4  ക,ഫയ സിസ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


ഫങ് ഷ് uക ഉ!ാേ !F!് ,ഇF%ടാെത ഇതിെf േ0ാEസ I ് കാണി+,തിനായി
േ0ാEസ I ് ബാറിേല ് വാല. െകാട+,തിuv േകാഡം േചേ !F!് .ഇെതാ
ഫങ് ഷെ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. േ0ാEാമിേല ് ട ബാ െമuബാ എ,ിവ േച+ക.


2. േ0ാEാമിനക് ൈറ)് ബ&e ക " ി ി വ, ഒ േപാപ് അ9് െമu നിhി+ക.
3. േപാ9് അ9് െമuവ ആചീവ് ഉ!ാ ാuം,എക I ് ?ാ)് െചCാuമv കമാfക ന£ക.
4. േലബ,¢യിം കeേ?ാളക ഉപേയാഗെ9ടിെകാ!് അഡ ാ8സ് ഡ് ട  ടി9് േച+ക.