技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 21536
|
本帖最后由 todaynew 于 2015-5-21 18:06 編輯
很久很久以前寫(xiě)過(guò)一個(gè)《斗天斗地斗引號(hào)---Rar壓縮及解壓文件示例》,在這個(gè)示例中對(duì)Rar的壓縮和解壓做了一些淺顯的論述。今日里,版友“這是我的小號(hào)”同志希望借用這個(gè)示例,進(jìn)一步折騰出帶密碼的壓縮與解壓功能來(lái)。于是乎“這是我的小號(hào)”同志在網(wǎng)上找了一些資料,發(fā)現(xiàn)只需要加一個(gè)p開(kāi)關(guān)就應(yīng)該可以了,于是他將Rar的解壓命令寫(xiě)做“ x -p ”。一測(cè)試,彈出了Rar的密碼對(duì)話框。這當(dāng)然不是版友“這是我的小號(hào)”同志所希望的。
為什么會(huì)這樣呢?我們先來(lái)分析一下。版友“這是我的小號(hào)”同志放了一個(gè)p,這個(gè)p表示一個(gè)Rar的開(kāi)關(guān)。但版友“這是我的小號(hào)”同志并沒(méi)有告訴Rar這個(gè)p到底是個(gè)什么調(diào)調(diào)。所以這個(gè)p實(shí)際并沒(méi)放響,只是告訴Rar打算放個(gè)p。好在Rar也很聰明,便彈出一個(gè)對(duì)話框,問(wèn)版友“這是我的小號(hào)”同志這個(gè)p是怎么個(gè)放法。到此,我們便知道了版友“這是我的小號(hào)”同志放的p出現(xiàn)了什么問(wèn)題--沒(méi)有進(jìn)一步寫(xiě)入密碼。所以正確的寫(xiě)法是:“ x -p123 ”(假設(shè)密碼是123)。
Rar命令行(也包括其他命令行)含有開(kāi)關(guān),開(kāi)關(guān)由“-”符號(hào)加一個(gè)有特定含義的字母構(gòu)成,有些開(kāi)關(guān)是不帶參數(shù)的,但有些就需要帶參數(shù)。密碼的開(kāi)關(guān)是個(gè)p,可以帶參數(shù)也可以不帶參數(shù)。不帶參數(shù)時(shí),僅表示壓縮或解壓時(shí)需要密碼,于是由Rar彈出對(duì)話框來(lái)進(jìn)一步確認(rèn)密碼;帶參數(shù)時(shí),Rar就在壓縮或解壓時(shí),按照密碼參數(shù)進(jìn)行操作,除非輸入密碼是錯(cuò)誤的,否則不會(huì)彈出對(duì)話框再詢問(wèn)什么。
放個(gè)p不難,難的是明白如何放p。明白了這一點(diǎn),p才能放得響徹云霄,驚天動(dòng)地。放p論述完了,但總是還要給“這是我的小號(hào)”同志一個(gè)交代,不能空談?wù)`國(guó)。于是便將原例中的相關(guān)代碼做了一個(gè)修改。
Public Function RarA(ByVal RAR As String, ByVal RARname As String, ByVal filname As String, Optional password As String)
'功能:壓縮文件
'參數(shù):RAR --RAR地址
' RARname---壓縮文件名(含路徑)
' filname---被壓縮的文件名或文件夾名(含路徑)
'示例:RarA "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\備份\后臺(tái)備份.rar",CurrentProject.Path & "\備份\*.mdb","123"
Dim cmd As String
If Nz(password, "") = "" Then
cmd = " a -r -ep -df "
Else
cmd = " a -r -ep -df -p{0} "
cmd = ReplaceValues(cmd, password)
End If
Call Shell(RAR & cmd & """" & RARname & """ """ & filname & """", vbNormalFocus)
End Function
Public Function RarX(ByVal RAR As String, ByVal RARname As String, ByVal fldname As String, Optional password As String)
'功能:解壓文件
'參數(shù):RAR --RAR地址
' RARname---壓縮文件名(含路徑)
' fldname---解壓的文件夾名(含路徑)
'示例:RarX "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\備份\后臺(tái)備份.rar",CurrentProject.Path & "\備份\*.mdb","123"
Dim cmd As String
If Nz(password, "") = "" Then
cmd = " x "
Else
cmd = " x -p{0} "
cmd = ReplaceValues(cmd, password)
End If
Call Shell(RAR & cmd & """" & RARname & """ *.* """ & fldname & """", vbNormalFocus)
End Function
Public Function ReplaceValues(ByVal str As String, ParamArray pArr() As Variant) As String
'功能:模仿.Net中的String.Format方法
Dim str1 As String
Dim num As String
Dim i As Integer
str1 = str
For i = 0 To UBound(pArr)
num = "{" & i & "}"
str1 = Replace(str1, num, pArr(i))
Next
ReplaceValues = str1
End Function
|
|