2016-06-08 25 views
0

我有一個Windows窗體(用vb製作),業務用戶可以在多行文本框中輸入文檔編號,每個編號可以包含一個到多個文檔,例如if他們輸入12345,然後gridview將顯示與該文件編號對應的4個文件(文件名稱和描述)。.Net 4.5中沒有第三方庫的Zip文件

現在我想通了,如何因爲如果他們想進入不止一個,他們需要用逗號分開解析文檔編號(感謝StackOverflow的!d),所以我有文件名稱的列表,我已搜查這個網站,但我不能理解如何循環通過我的目錄中的文檔名稱列表,並將它們壓縮到沒有像dotnet等第三方庫的文件夾,因爲我不允許。

我知道.NET的靜態(不知道如果是正確的術語)類「zipfile」和「ziparchive」與system.IO和system.IO.compression,但看着msdn網站和答案在這裏我找到了答案涉及在文件中寫入行以添加到zipfile文件夾或在文件夾中創建它們。

所以我的問題是,無論如何我可以通過該文檔名稱列表循環,並創建一個zipfile文件夾,並將它們添加到創建的zipfile文件夾?到目前爲止,我得到了這個遠在問候拉鍊路我得到的文件名和路徑如下所示的列表中的每個「文件」(我上面講的):

Dim values As String = TextBox1.Text.Replace(" ", ",") 
Dim DocNum As String() = values.Trim().Split(","c) 
Dim fullitems As String 
For Each s As String In DocNum 
    Dim files() As String = Directory.GetFiles("\\folder path" & s) 
      If files.Length > 0 Then 
      For i As Integer = 0 To files.Length - 1 
       fullitems = files(i).ToString 
      Next i 
     End If 
    Next 

如何任何意見或方向去從一個文件夾中添加文件到.net中的zip文件夾與vb表示感謝!

+0

'沒有第三方庫如dotnet'這不是第三方它是4.5框架的一部分。如果是這樣的話,那麼編寫你自己的壓縮算法,這將是一個開始... – Codexer

+0

@Zaggler謝謝你的回覆!但從我閱讀的內容中我需要下載dotnetziplibrary來使用它?我嘗試編寫自己的算法,但是我很難理解如何在zip壓縮文件或壓縮文件中添加文件我只能找到如何創建一個條目並將其寫入或寫入現有文件 – jean55

+0

因此,您希望「添加」到一個檔案***或***你想「創建」一個帶有文件的zip文件,哪一個? – Codexer

回答

1

我想創建一個zip文件夾並將現有文件(在這種情況下是文檔)添加到.zip文件夾中,這可能嗎?

是的,這是可能的。首先,您需要爲您的項目添加幾個參考。

  • System.IO.Compression
  • System.IO.Compression.FileSystem

接下來,這些Import語句添加到您的類文件。

Imports System.IO 
Imports System.IO.Compression 

我用了一個按鈕單擊事件要做到這一點,但你可以把任何你想...

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Using modFile As ZipArchive = ZipFile.Open("ZIP PATH HERE", ZipArchiveMode.Update) 
      modFile.CreateEntryFromFile("FILE YOU WANT TO ADD", "ENTRY NAME") 
     End Using 
    End Sub 
+0

謝謝你的工作!但在zip文件中添加的文件不是他們只是說「文件」,而不打開的PDF文件是否有實際複製PDF文件到壓縮文件? – jean55

+0

@ jean55有趣,因爲我使用了一些文本文檔,工作得很好。它應該將文件(壓縮)添加到'zip'文件中...讓我用'pdf'試試我的末尾... – Codexer

+0

@ jean55它說'ENTRY NAME'是否確保包含文件'擴展名'?例如:'.pdf' – Codexer

0

對於比較簡單的使用,如果你希望把拉鍊包含的所有文件現有的文件夾。

這很簡單,因爲您不必確保指定完整的文件名,它只需要在文件夾中找到所有文件。不過,您必須在「destination_file.zip」文件名上指定「.zip」擴展名。

正如在另一個答案中指出的,您需要添加兩個引用到您的項目。

  1. System.IO.Compression
  2. System.IO.Compression。FileSystem

並將這些Import語句添加到您的類文件中。

Imports System.IO 
Imports System.IO.Compression 

這裏是按鈕點擊程序中的一些代碼,它可以放在其他地方。正如你所看到的,它只是一行代碼。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    ZipFile.CreateFromDirectory("Folder you want to zip", 
           "destination_file.zip", 
           CompressionLevel.Optimal, 
           False) 
End Sub 

但看起來你希望將選定的文件發送到.zip壓縮文件。

比方說,你有一個名爲dgv1 DataGridView控件,用數據填充的幾行,你有多種選擇其中的幾個線條,以及全路徑/文件名是在DataGridView的第一列。

有一個幫助函數(selectedList())將datagridview中的選定單元格式化爲完整路徑/文件名列表。

zipEm()函數獲取文件列表和目標存檔文件名並創建一個.zip文件。

Button1_Click()例程調用前兩個例程並向用戶提供反饋。

 ' returns list of items from column col that are selected 
Function selectedList(dgv1 As DataGridView, col As Integer) As List(Of String) 
    selectedList = New List(Of String) 
    For Each cell As DataGridViewCell In dgv1.SelectedCells 
     If cell.ColumnIndex = col Then selectedList.Add(cell.Value.ToString()) 
    Next 
End Function 

' archives a list of files to the designated file (overwriting, if it already exists) 
Function zipEm(fileList As List(Of String), nzfName As String) As Boolean 
    Try 
     If File.Exists(nzfName) Then File.Delete(nzfName) 
     Using newZipFile As ZipArchive = ZipFile.Open(nzfName, ZipArchiveMode.Create) 
      For Each pfn As String In fileList 
       newZipFile.CreateEntryFromFile(pfn, Path.GetFileName(pfn)) 
      Next 
     End Using 
    Catch ex As Exception 
     Return False 
    End Try 
    Return True 
End Function 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim fileList As List(Of String) = selectedList(dgv1, 0) 
    If fileList.Count = 0 Then 
     MsgBox("No valid items selected.", vbExclamation, "'lil problem") 
     Exit Sub 
    End If 
    Dim nzfName As String = Path.Combine(Path.GetDirectoryName(fileList(0)), 
          "sample (" & fileList.Count.ToString() & " items).zip") 
    If zipEm(fileList, nzfName) Then 
     MsgBox("Saved zip file containing " & fileList.Count.ToString() & " items.", 
       vbOKOnly, "sucess") 
    Else 
     MsgBox("Unable to save .zip file.", vbExclamation, "'lil problem") 
    End If 
End Sub 

如果你喜歡的文件累積到存檔(而不是覆蓋),常量「Z​​ipArchiveMode.Create」可以在ZipFile.Open()調用的改爲「ZipArchiveMode.Update」 zipEm()例程。