跳過到頁腳內容
使用 IRONZIP

使用 IronZIP for .NET 的 .NET MAUI 資料擷取 SDK

.NET MAUI,即 .NET 多平台應用程式 UI,是一個用於建立跨平台應用程式的框架。 它允許開發者使用單一程式碼庫建立可在 Windows、macOS、iOS、Android 和其他裝置上運行的應用程式。 與 React Native 類似,但它使用 C# 而不是 JavaScript。

.NET MAUI 允許 C# 開發人員輕鬆從單一環境建立行動應用程式和桌面應用程式。 Microsoft .NET MAUI 提供全面的文件和資源,幫助開發人員簡化和最佳化應用程式開發流程。

本文將探索 IronZIP -- 強大的 C# ZIP 存檔庫,與 .NET MAUI 的集成。

如何從 ZIP 壓縮包中提取數據

  1. 建立一個 Visual Studio .NET MAUI 專案
  2. 使用 NuGet 安裝 C# Zip 函式庫
  3. 設計資料擷取應用程式介面
  4. 實作建立 Zip 和提取 Zip 方法
  5. 運行應用程式並驗證結果

IronZIP簡介

IronZIP是一個全面的 C# ZIP 歸檔庫,專為在 .NET 中建立、讀取和提取歸檔檔案而設計。 它支援多種壓縮格式,包括 ZIP、TAR、GZIP 和 BZIP2。 IronZIP 與各種 .NET 版本相容,例如 .NET 7、6、5、Core、Standard 和 Framework。

它是跨平台的,因此適用於在 Windows、Linux、Mac、iOS、Android、Docker、Azure 和 AWS 上運行的 C#、F# 和 VB.NET 應用程式。

IronZIP 的主要功能包括:

  • 支援多種作業系統。
  • 與不同 .NET 版本和專案類型相容。
  • 支援建立、讀取和提取 ZIP、TAR、GZIP 和 BZIP2 歸檔檔案。
  • 與 .NET MAUI 集成,用於建立多平台應用程式。

先決條件

在開始之前,請確保您已具備以下先決條件:

  1. 安裝了 .NET MAUI 工作負載的Visual Studio
  2. 將 IronZIP 庫加入您的 .NET MAUI 專案中。

在 Visual Studio 中建立 .NET MAUI 應用程式的步驟

  1. 開啟 Visual Studio,然後按一下"建立新專案"。
  2. 選擇 .NET MAUI 應用程式專案模板,然後按一下"下一步"。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 1

  3. 配置項目設定、項目名稱和位置。 按一下下一步。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 2

  4. 從"附加資訊"中選擇正確的 .NET Framework。 IronZIP 支援最新版本的 .NET Framework,您可以選擇該版本。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 3

  5. 按一下"建立"以使用 IronZIP 庫建立用於 Zip 資料擷取的 .NET MAUI 應用程式。

安裝 IronZip

若要將 IronZIP 整合到您的 .NET MAUI 專案中,請依照下列步驟操作:

  1. 從"視圖"開啟解決方案資源管理器。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 4

  2. 在解決方案資源管理器中以滑鼠右鍵按一下您的專案。
  3. 選擇"管理解決方案的 NuGet 套件"。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 5

  4. 在 NuGet 瀏覽標籤中,搜尋"IronZIP",然後為您的專案安裝該套件。

    ! .NET MAUI 資料擷取 SDK(開發者教學):圖 6

  5. 在"預覽更改"對話方塊中,按一下"套用"進行更改,然後按一下"接受"接受 IronZIP 許可。
  6. NuGet 將完成安裝,並顯示確認訊息。

現在,一切都已安裝設定完畢,讓我們開始在 .NET MAUI 中建立 Zip 提取器的資料提取任務。

建立 Zip 解壓縮程式的步驟

第一步:設計應用程式介面

在本節中,我們將重點介紹如何為您的 .NET MAUI 應用程式設計使用者介面。 開啟專案資料夾中的MainPage.xaml文件,並新增必要的 XAML 程式碼以建立使用者友善的介面。

這裡我們需要兩個按鈕,一個用來建立 zip 文件,另一個用來解壓縮 zip 檔案。 此外,還需要添加一些標籤來傳遞適當的訊息。 以下程式碼範例展示了該設計的 XAML 程式碼:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiAppDataExtraction.MainPage">
    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">
            <Label
                Text="IronZIP - A Zip Library to Create and Extract Zip Content!"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="32"
                HorizontalOptions="Center" />
            <Label
                Text="Welcome to .NET Multi-platform App UI"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to dot net Multi platform App U I"
                FontSize="18"
                HorizontalOptions="Center" />
            <Button
                x:Name="OpenFileBtn"
                Text="Extract Zip File"
                SemanticProperties.Hint="Opens the File Picker"
                Clicked="OnSelectFileButtonClicked"
                HorizontalOptions="Center" />
            <Button
                 x:Name="OpenFilesBtn"
                 Text="Create Zip"
                 SemanticProperties.Hint="Opens the File Picker"
                 Clicked="OnSelectFilesButtonClicked"
                 HorizontalOptions="Center" />  
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiAppDataExtraction.MainPage">
    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">
            <Label
                Text="IronZIP - A Zip Library to Create and Extract Zip Content!"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="32"
                HorizontalOptions="Center" />
            <Label
                Text="Welcome to .NET Multi-platform App UI"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to dot net Multi platform App U I"
                FontSize="18"
                HorizontalOptions="Center" />
            <Button
                x:Name="OpenFileBtn"
                Text="Extract Zip File"
                SemanticProperties.Hint="Opens the File Picker"
                Clicked="OnSelectFileButtonClicked"
                HorizontalOptions="Center" />
            <Button
                 x:Name="OpenFilesBtn"
                 Text="Create Zip"
                 SemanticProperties.Hint="Opens the File Picker"
                 Clicked="OnSelectFilesButtonClicked"
                 HorizontalOptions="Center" />  
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
XML

運行該應用程序,您將在螢幕上看到常規的 Windows 窗體輸出。

! .NET MAUI 資料擷取 SDK(開發者教學):圖 7

步驟 2:實作程式碼

1. 建立壓縮包

開啟MainPage.xaml.cs檔案並建立"建立 Zip "功能。 實作OnSelectFilesButtonClicked方法,允許開啟檔案選擇器並選擇任意類型的多個檔案來建立 zip 檔案。

然後,建立所選檔案的所有路徑清單。 最後,將其傳遞給CreateZip方法,IronZIP 將在一秒鐘內使用所有檔案路徑無縫建立 zip 檔案。

以下程式碼範例展示如何實現此任務。

private async void OnSelectFilesButtonClicked(object sender, EventArgs e)
{
    try
    {
        var status = await Permissions.RequestAsync<Permissions.StorageRead>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Alert!", "Storage Access Denied", "Ok");
            return;
        }
        // Select multiple files of any type
        var results = await FilePicker.PickMultipleAsync();
        if (results != null)
        {
            var selectedFilePaths = new List<string>();
            foreach (var file in results)
            {
                // Add file full path to the list one by one
                selectedFilePaths.Add(file.FullPath);
            }
            CreateZip(selectedFilePaths);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
    }
}
private async void OnSelectFilesButtonClicked(object sender, EventArgs e)
{
    try
    {
        var status = await Permissions.RequestAsync<Permissions.StorageRead>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Alert!", "Storage Access Denied", "Ok");
            return;
        }
        // Select multiple files of any type
        var results = await FilePicker.PickMultipleAsync();
        if (results != null)
        {
            var selectedFilePaths = new List<string>();
            foreach (var file in results)
            {
                // Add file full path to the list one by one
                selectedFilePaths.Add(file.FullPath);
            }
            CreateZip(selectedFilePaths);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
    }
}
Private Async Sub OnSelectFilesButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
	Try
		Dim status = Await Permissions.RequestAsync(Of Permissions.StorageRead)()
		If status <> PermissionStatus.Granted Then
			Await DisplayAlert("Alert!", "Storage Access Denied", "Ok")
			Return
		End If
		' Select multiple files of any type
		Dim results = Await FilePicker.PickMultipleAsync()
		If results IsNot Nothing Then
			Dim selectedFilePaths = New List(Of String)()
			For Each file In results
				' Add file full path to the list one by one
				selectedFilePaths.Add(file.FullPath)
			Next file
			CreateZip(selectedFilePaths)
		End If
	Catch ex As Exception
		Console.WriteLine($"Error: {ex.Message}")
	End Try
End Sub
$vbLabelText   $csharpLabel

接下來,實作CreateZip方法。 IronZIP 的IronArchive類別接受要建立 zip 檔案的路徑。 遍歷每個選定的檔案路徑,並透過Add方法將它們新增至 zip 檔案。

新增檔案時,使用DisplayAlert顯示確認訊息。

private async void CreateZip(List<string> selectedFilePaths)
{
    var path = "E:\\output.zip";
    // Create a Zip
    using (var archive = new IronArchive(path))
    {
        // Add files to the ZIP
        foreach (var file in selectedFilePaths)
        {
            archive.Add(file);
        }
    }
    await DisplayAlert("Congratulations", "All files added to " + path, "Ok");
}
private async void CreateZip(List<string> selectedFilePaths)
{
    var path = "E:\\output.zip";
    // Create a Zip
    using (var archive = new IronArchive(path))
    {
        // Add files to the ZIP
        foreach (var file in selectedFilePaths)
        {
            archive.Add(file);
        }
    }
    await DisplayAlert("Congratulations", "All files added to " + path, "Ok");
}
Private Async Sub CreateZip(ByVal selectedFilePaths As List(Of String))
	Dim path = "E:\output.zip"
	' Create a Zip
	Using archive = New IronArchive(path)
		' Add files to the ZIP
		For Each file In selectedFilePaths
			archive.Add(file)
		Next file
	End Using
	Await DisplayAlert("Congratulations", "All files added to " & path, "Ok")
End Sub
$vbLabelText   $csharpLabel

有關如何建立、向現有 zip 檔案添加檔案以及解壓縮 zip 檔案的更多詳細信息,請訪問此教學頁面

2. 解壓縮 ZIP 文件

現在,我們將建立"提取 Zip 檔案"功能。 同樣,在MainPage.xaml.cs檔案中,實作OnSelectFileButtonClicked方法,以便開啟FilePicker並選擇單一 zip 檔案進行提取。

選取檔案的完整路徑被設定為字串變量,並傳送到ExtractZip方法,IronZIP 在該方法中執行提取操作。 代碼如下:

private async void OnSelectFileButtonClicked(object sender, EventArgs e)
{
    try
    {
        var status = await Permissions.RequestAsync<Permissions.StorageRead>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Alert!", "Storage Access Denied", "Ok");
            return;
        }
        // Select a single file of any type
        var result = await FilePicker.PickAsync();
        if (result != null)
        {
            // Add File Full Path to the list one by one
            var selectedFile = result.FullPath;
            ExtractZip(selectedFile);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
    }
}
private async void OnSelectFileButtonClicked(object sender, EventArgs e)
{
    try
    {
        var status = await Permissions.RequestAsync<Permissions.StorageRead>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Alert!", "Storage Access Denied", "Ok");
            return;
        }
        // Select a single file of any type
        var result = await FilePicker.PickAsync();
        if (result != null)
        {
            // Add File Full Path to the list one by one
            var selectedFile = result.FullPath;
            ExtractZip(selectedFile);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
    }
}
Private Async Sub OnSelectFileButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
	Try
		Dim status = Await Permissions.RequestAsync(Of Permissions.StorageRead)()
		If status <> PermissionStatus.Granted Then
			Await DisplayAlert("Alert!", "Storage Access Denied", "Ok")
			Return
		End If
		' Select a single file of any type
		Dim result = Await FilePicker.PickAsync()
		If result IsNot Nothing Then
			' Add File Full Path to the list one by one
			Dim selectedFile = result.FullPath
			ExtractZip(selectedFile)
		End If
	Catch ex As Exception
		Console.WriteLine($"Error: {ex.Message}")
	End Try
End Sub
$vbLabelText   $csharpLabel

接下來,建立ExtractZip方法。 使用此方法時,請設定要將檔案解壓縮到的輸出資料夾路徑。

使用 IronZIP 的ExtractArchiveToDirectory方法,傳遞選取的檔案路徑和輸出路徑。 此方法可將壓縮包中的所有檔案無縫轉換並傳輸到輸出資料夾。 最後,提取成功後會顯示確認訊息。

代碼如下:

private async void ExtractZip(string selectedFilePath)
{
    var path = "E:\\Extracted Files";
    IronArchive.ExtractArchiveToDirectory(selectedFilePath, path);
    await DisplayAlert("Congratulations", "All files extracted to " + path, "Ok");
}
private async void ExtractZip(string selectedFilePath)
{
    var path = "E:\\Extracted Files";
    IronArchive.ExtractArchiveToDirectory(selectedFilePath, path);
    await DisplayAlert("Congratulations", "All files extracted to " + path, "Ok");
}
Private Async Sub ExtractZip(ByVal selectedFilePath As String)
	Dim path = "E:\Extracted Files"
	IronArchive.ExtractArchiveToDirectory(selectedFilePath, path)
	Await DisplayAlert("Congratulations", "All files extracted to " & path, "Ok")
End Sub
$vbLabelText   $csharpLabel

步驟 3:運行應用程式

成功將程式碼與 IronZIP 整合後,建置並執行應用程式以執行資料擷取任務。 透過建立 zip 檔案並從中提取檔案來測試功能。

透過檢查指定目錄中的輸出檔案和提取的檔案來驗證結果。

第四步:驗證結果

1. 測試建立 ZIP 文件

我們先來嘗試建立一個zip檔。點選"建立Zip"按鈕,就會跳出一個檔案對話框。 您可以選擇將多個檔案或單一檔案新增至壓縮套件。

! .NET MAUI 資料擷取 SDK(開發者教學):圖 8

點擊"開啟",將出現一條確認訊息,提示檔案已成功新增至 output.zip 中。

! .NET MAUI 資料擷取 SDK(開發者教學):圖 9

如果我們找到 output.zip 檔案並查看其內容,就會看到我們新增的所有檔案。

.NET MAUI 資料擷取 SDK(開發者教學):圖 10

2. 測試解壓縮 ZIP 文件

現在我們來解壓縮一個zip檔。點選"解壓縮"按鈕,將會出現一個檔案對話框。 選擇要解壓縮的 zip 文件,然後按一下"開啟"。

.NET MAUI 資料擷取 SDK(開發者教學):圖 11

從 zip 檔案中提取資料並解壓縮到指定資料夾後,會顯示確認資訊。

.NET MAUI 資料擷取 SDK(開發者教學):圖 12

現在,導航到"已提取檔案"資料夾,您將看到從我們選擇的 zip 檔案中提取的檔案。

.NET MAUI 資料擷取 SDK(開發者教學):圖 13

結論

總而言之,將 IronZIP 與 .NET MAUI 集成,為在跨平台應用程式中建立、讀取和提取歸檔檔案提供了一個強大的解決方案。

提供的範例示範如何在 .NET MAUI 中使用 IronZIP 選擇多個檔案、產生 zip 檔案以及從 zip 檔案中提取檔案。

這些技術的結合為開發人員提供了跨各種平台管理和操作歸檔文件的無縫體驗。

如需了解更多詳細資訊和程式碼範例,請造訪此文件頁面。

IronZIP 提供免費試用。 您可以從這裡下載該庫並試用。

常見問題解答

如何將 ZIP 函式庫與 .NET MAUI 專案整合?

若要將類似 IronZIP 的 ZIP 函式庫與 .NET MAUI 專案整合,請在 Visual Studio 中建立新的 .NET MAUI 專案,透過 NuGet 安裝 IronZIP 函式庫,並使用提供的程式範例實作 ZIP 存檔功能。

在 .NET MAUI 應用程式中使用 ZIP 函式庫有什麼好處?

在 .NET MAUI 應用程式中使用 IronZIP 之類的 ZIP 函式庫,可以有效率地壓縮和萃取資料,支援多種歸檔格式,並與各種平台和 .NET 版本相容。

我可以將 ZIP 函式庫用於跨平台應用程式嗎?

是的,您可以將 IronZIP 用於跨平台應用程式。它支援 Windows、Linux、Mac、iOS 和 Android 上的 C#、F# 和 VB.NET 應用程式。

如何在 .NET MAUI 應用程式中建立 ZIP 檔案?

在 .NET MAUI 應用程式中,您可以使用 IronZIP 函式庫建立 ZIP 檔案。實作 OnSelectFilesButtonClicked 方法以允許檔案選擇,並使用 IronArchive 類,以 CreateZip 方法將檔案新增至 ZIP 存檔。

如何在 .NET MAUI 專案中從 ZIP 存檔中萃取檔案?

要在 .NET MAUI 專案中從 ZIP 存檔中提取檔案,請使用 IronZIP 的 ExtractArchiveToDirectory 方法。首先,實作 OnSelectFileButtonClicked 方法來選擇 ZIP 檔案,然後將其內容抽取到指定目錄。

IronZIP 支援哪些檔案格式?

IronZIP 支援多種歸檔格式,包括 ZIP、TAR、GZIP 和 BZIP2,使其成為處理不同類型壓縮檔案歸檔的多用途選擇。

IronZIP 是否與不同的 .NET 版本相容?

是的,IronZIP 與各種 .NET 版本相容,例如 .NET 7、6、5、Core、Standard 和 Framework,為使用不同 .NET 環境的開發人員提供彈性。

在 .NET MAUI 中實作 ZIP 函式庫的先決條件是什麼?

若要在 .NET MAUI 中實作 IronZIP 之類的 ZIP 函式庫,請確保您已安裝具有 .NET MAUI 工作量的 Visual Studio,並透過 NuGet 將 IronZIP 函式庫新增至您的專案中。

如何使用 ZIP 功能增強 .NET MAUI 應用程式?

透過整合 IronZIP 來管理 ZIP 檔案的建立與擷取,強化 .NET MAUI 應用程式,為使用者提供強大的資料壓縮與解壓縮功能。

我在哪裡可以找到更多關於在 .NET MAUI 中使用 ZIP 函式庫的資訊?

如需更詳細的資訊和程式碼範例,您可以造訪 IronZIP 文件頁面,該頁面提供在 .NET MAUI 專案中整合和使用 ZIP 功能的全面指導。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。