Vọc chơi với những thuật toán nén và giải nén file

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Tôi mở topic này nhằm mục đích cùng nhau nghiên cứu về nén và giải nén dùng công cụ VBA
Đầu tiên chúng ta cùng làm cuộc thí nghiệm nhỏ sau:
- Click chuột phải trên Desktop, chọn New ---> WinRAR archive (hoặc WinRAR Zip archive). Đương nhiên ta sẽ nhận được một file RAR hoặc ZIP trắng
- Tiếp theo khởi động Notepad
- Dùng chuột nắm kéo file RAR (hoặc ZIP) mới vừa tạo thả vào cửa sổ Notepad

Các bạn nhìn thấy cái gì trong Notepad?
Mời trả lời rồi chúng ta sẽ tiếp tục
 
Được cái này: Rar! ϐs :AS:L<
Untitled.png
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi mở topic này nhằm mục đích cùng nhau nghiên cứu về nén và giải nén dùng công cụ VBA
Đầu tiên chúng ta cùng làm cuộc thí nghiệm nhỏ sau:
- Click chuột phải trên Desktop, chọn New ---> WinRAR archive (hoặc WinRAR Zip archive). Đương nhiên ta sẽ nhận được một file RAR hoặc ZIP trắng
- Tiếp theo khởi động Notepad
- Dùng chuột nắm kéo file RAR (hoặc ZIP) mới vừa tạo thả vào cửa sổ Notepad

Các bạn nhìn thấy cái gì trong Notepad?
Mời trả lời rồi chúng ta sẽ tiếp tục

Nhìn thấy thế này trong notepad

 
Upvote 0
Tôi mở topic này nhằm mục đích cùng nhau nghiên cứu về nén và giải nén dùng công cụ VBA
Đầu tiên chúng ta cùng làm cuộc thí nghiệm nhỏ sau:
- Click chuột phải trên Desktop, chọn New ---> WinRAR archive (hoặc WinRAR Zip archive). Đương nhiên ta sẽ nhận được một file RAR hoặc ZIP trắng
- Tiếp theo khởi động Notepad
- Dùng chuột nắm kéo file RAR (hoặc ZIP) mới vừa tạo thả vào cửa sổ Notepad

Các bạn nhìn thấy cái gì trong Notepad?
Mời trả lời rồi chúng ta sẽ tiếp tục
Em Thấy như sau....Nhưng sau khi kéo vào Notepad thì mở lại File rar báo lỗi
Rar! ϐs
 
Upvote 0
Sao mình lại ra chữ này: PK|-
 
Upvote 0
Sao mình lại ra chữ này: PK|-

OK! những ai nhìn thấy PK|- có nghĩa là đang test với ZIP file, ngược lại là đang test với RAR file
-------------------
Ở đây chúng ta bắt đầu quan tâm đến ZIP (RAR cho qua nhé)
Vậy các bạn thử thí nghiệm tiếp:
- Mở Notepad
- Gõ vào nội dung PK|-
- Lưu ý rằng ký tự "-" có charcode = 6 nha chứ không phải ký tự cạnh dấu = đâu (tốt nhất cứ copy cái PK|- hồi nảy rồi paste cho chắc ăn)
- Xong Save As lên Desktop với tên abc.zip
- Đóng Notepad và double clikc vào abc.zip xem có được không?
 
Upvote 0
OK! những ai nhìn thấy PK|- có nghĩa là đang test với ZIP file, ngược lại là đang test với RAR file
-------------------
Ở đây chúng ta bắt đầu quan tâm đến ZIP (RAR cho qua nhé)
Vậy các bạn thử thí nghiệm tiếp:
- Mở Notepad
- Gõ vào nội dung PK|-
- Lưu ý rằng ký tự "-" có charcode = 6 nha chứ không phải ký tự cạnh dấu = đâu (tốt nhất cứ copy cái PK|- hồi nảy rồi paste cho chắc ăn)
- Xong Save As lên Desktop với tên abc.zip
- Đóng Notepad và double clikc vào abc.zip xem có được không?

nếu chỉ copy có 4 ký tự rồi save as zip file thì mở bằng zip được nhưng không giải nén được
nếu copy 4 kí tự với 1 số ký tự null gì đó đằng sau rồi save as zip thì giải nén mới không báo lỗi . nhưng giải nén hổng ra cái gì . chỉ là không báo lỗi như khi giải nén với 4 kí tự thôi
 
Upvote 0
nếu chỉ copy có 4 ký tự rồi save as zip file thì mở bằng zip được nhưng không giải nén được
nếu copy 4 kí tự với 1 số ký tự null gì đó đằng sau rồi save as zip thì giải nén mới không báo lỗi . nhưng giải nén hổng ra cái gì . chỉ là không báo lỗi như khi giải nén với 4 kí tự thôi

OK! Thì cứ từ từ thí nghiệm chứ
 
Upvote 0
thầy giáo cứ nói tiếp đi ạ . ( chứ nếu không nói thì các học trò cũng đâu biết gì để làm ) hi hi

Mục đích cuối cùng là nén 1 file nào đó thành file ZIP hoặc giải nén 1 file ZIP ra 1 thư mục
Vậy thôi!
Tuy nhiên để nén file, nếu làm bằng tay thì dễ chứ còn code thì phải "dạy" nó từ từ:
- Tạo 1 file zip trắng (như nảy giờ bàn)
- Xong kéo file cần zip vào file zip trắng này
Vậy là ta có được file nén rồi
----------------------
Nói thêm 1 chút: Với file dạng XLSX hoặc XLSM, nếu đổi đuôi thành .ZIP rồi mở lên thì ta sẽ có được 1 nội dung hoàn toàn khác đồng thời có thể làm được rất nhiều thứ bên trong nó (chẳng hạn Edit lại các file dạng xml để làm Ribbon hay xóa style, name.. vân vân...)
 
Lần chỉnh sửa cuối:
Upvote 0
Mục đích cuối cùng là nén 1 file nào đó thành file ZIP hoặc giải nén 1 file ZIP ra 1 thư mục
Vậy thôi!
Tuy nhiên để nén file, nếu làm bằng tay thì dễ chứ còn code thì phải "dạy" nó từ từ:
- Tạo 1 file zip trắng (như nảy giờ bàn)
- Xong kéo file cần zip vào file zip trắng này
Vậy là ta có được file nén rồi

Vâng. bài tới đây kết thúc. Bùm Bùm Bùm (3 hồi trống)..........học trò giải tán!!!-\\/.-\\/.-\\/.
 
Upvote 0
Ai đó thử tạo 1 NewZipFile bằng VBA như nảy giờ bàn xem!
(bằng Scripting.FileSystemObject CreateTextFile theo nội dung đã biết)
 
Upvote 0
Ai đó thử tạo 1 NewZipFile bằng VBA như nảy giờ bàn xem!
(bằng Scripting.FileSystemObject CreateTextFile theo nội dung đã biết)

Mã:
Public Sub hell()
Dim fso As Object, oFile As Object, strPath As String
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = ThisWorkbook.Path & "\abc.zip"
Set oFile = fso.CreateTextFile(strPath)
oFile.WriteLine Sheet1.Range("A1").Value
oFile.Close
Set fso = Nothing
Set oFile = Nothing
End Sub

kí tự char(6) không copy được lên diễn đàn hay sao ấy thầy ơi
 
Upvote 0
Mã:
Public Sub hell()
Dim fso As Object, oFile As Object, strPath As String
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = ThisWorkbook.Path & "\abc.zip"
Set oFile = fso.CreateTextFile(strPath)
oFile.WriteLine Sheet1.Range("A1").Value
oFile.Close
Set fso = Nothing
Set oFile = Nothing
End Sub

kí tự char(6) không copy được lên diễn đàn hay sao ấy thầy ơi

Thì viết oFile.WriteLine "PK" & Chr(5) & Chr(6) & String(18, 0) cũng được vậy (biết charcode của nó rồi còn gì)
 
Upvote 0
OK! Mình viết như vầy:
Mã:
Function NewZip(ByVal ZipFile As String) As Boolean
  Dim fso As Object
  On Error GoTo ErrHandler
  Set fso = CreateObject("Scripting.FileSystemObject")
  With fso.CreateTextFile(ZipFile, True)
    .Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    .Close
  End With
  NewZip = (Err.Number = 0)
  Exit Function
ErrHandler:   MsgBox Err.Description
End Function
Mã:
Sub Main()
  Dim bRet As Boolean
  bRet = NewZip("D:\abc.zip")
  If bRet Then MsgBox "Done!"
End Sub
Phải tạo thành Function hoặc sub có tham số truyền để còn làm nhiều việc sau đó nữa
----------------------
mời test thừ và cho biết kết quả rồi ta sẽ tính tiếp những bước sau
 
Upvote 0
OK! Mình viết như vầy:
Mã:
Function NewZip(ByVal ZipFile As String) As Boolean
  Dim fso As Object
  On Error GoTo ErrHandler
  Set fso = CreateObject("Scripting.FileSystemObject")
  With fso.CreateTextFile(ZipFile, True)
    .Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    .Close
  End With
  NewZip = (Err.Number = 0)
  Exit Function
ErrHandler:   MsgBox Err.Description
End Function
Mã:
Sub Main()
  Dim bRet As Boolean
  bRet = NewZip("D:\abc.zip")
  If bRet Then MsgBox "Done!"
End Sub
Phải tạo thành Function hoặc sub có tham số truyền để còn làm nhiều việc sau đó nữa
----------------------
mời test thừ và cho biết kết quả rồi ta sẽ tính tiếp những bước sau
Nó tạo ra một file zip rỗng Anh ... giải nén ra là lỗi ... mở lên thì OK
 
Upvote 0
Web KT
Back
Top Bottom