Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 4798|回復(fù): 10
打印 上一主題 下一主題

[模塊/函數(shù)] 【Access小品】如何放屁 -- 再論壓縮與解壓

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-5-21 17:33:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 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


本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2015-5-22 04:47:46 來(lái)自手機(jī) | 只看該作者
好文章,贊一個(gè)
3#
發(fā)表于 2015-5-22 11:25:16 | 只看該作者
按這個(gè)函數(shù)處理的話,解壓后的文件自動(dòng)放在“我的文檔”里:
Sub winrar()
Call RarX("C:\Program Files\WinRAR\WinRAR.exe", CurrentProject.Path & "\訂單VArGAU.zip", CurrentProject.Path & "\備份\*.csv", "VArGAU")
End Sub
換句話說(shuō),即使存在“備份”文件夾,也不會(huì)放在“備份”文件夾中。還能改么?
4#
發(fā)表于 2015-5-22 13:51:44 | 只看該作者
我知道了。
  1. Public Function RarX(ByVal RAR As String, ByVal RARname As String, ByVal fldname As String, Optional password As String)
  2.     '功能:解壓文件
  3.     '參數(shù):RAR --RAR地址
  4.     '     RARname---壓縮文件名(含路徑)
  5.     '     fldname---解壓的文件夾名(含路徑)
  6.     '示例:RarX "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\備份\后臺(tái)備份.rar",CurrentProject.Path & "\備份\*.mdb","123"
  7.     Dim cmd As String
  8.     If Nz(password, "") = "" Then
  9.         cmd = " x "
  10.     Else
  11. '加個(gè)-o才可以把文件解壓到指定文件夾。否則默認(rèn)解壓到“我的文檔”
  12.         cmd = " x -o -p{0} "
  13.         cmd = ReplaceValues(cmd, password)
  14.     End If
  15.     Call Shell(RAR & cmd & """" & RARname & """ *.* """ & fldname & """", vbNormalFocus)
  16. End Function
復(fù)制代碼
5#
 樓主| 發(fā)表于 2015-5-22 14:03:32 | 只看該作者

點(diǎn)擊這里給我發(fā)消息

6#
發(fā)表于 2015-5-23 11:14:37 | 只看該作者
學(xué)習(xí)啦
回復(fù)

使用道具 舉報(bào)

7#
發(fā)表于 2015-5-28 10:28:17 | 只看該作者
todaynew  代碼寫(xiě)得好,就是描述有點(diǎn){:soso_e112:},不過(guò)還是謝謝了!
8#
發(fā)表于 2016-7-30 12:44:43 | 只看該作者
這個(gè)用得到,頂一個(gè)
9#
發(fā)表于 2016-8-20 11:24:06 | 只看該作者
已經(jīng)下載學(xué)習(xí),謝謝
10#
發(fā)表于 2017-7-28 17:26:58 | 只看該作者
謝謝
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-16 18:15 , Processed in 0.090955 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表