วิธีดาวน์โหลดและแตกไฟล์ Gzipped ด้วย C#

ในโลกที่ขับเคลื่อนด้วยข้อมูลในปัจจุบัน คุณอาจพบว่าตัวเองต้องดาวน์โหลดและประมวลผลไฟล์เป็นประจำ หนึ่งในงานที่พบได้บ่อยคือการดาวน์โหลดไฟล์ gzipped แต่การทำเช่นนี้ใน C# อาจเป็นเรื่องท้าทายหากคุณไม่คุ้นเคยกับวิธีการที่ถูกต้อง คู่มือนี้จะนำคุณผ่านขั้นตอนการดาวน์โหลดและแตกไฟล์ gzipped โดยใช้ C# อย่างมีระเบียบ

ปัญหา: การดาวน์โหลดไฟล์ Gzipped

เว็บไซต์หลายแห่งโฮสต์ข้อมูลในรูปแบบบีบอัด เช่น gzip เพื่อลดการใช้แบนด์วิธ ตัวอย่างเช่น URL http://data.dot.state.mn.us/dds/det_sample.xml.gz ชี้ไปที่ไฟล์ XML ที่บีบอัดด้วย gzip หากคุณต้องการดาวน์โหลด แตกไฟล์ และบันทึกไฟล์นี้ลงในดิสก์ของคุณ คุณจะต้องรู้วิธีการทำอย่างมีประสิทธิภาพใน C#

วิธีแก้ไข: คู่มือทีละขั้นตอน

1. ดาวน์โหลดไฟล์ Gzipped

ในการดาวน์โหลดไฟล์ gzipped คุณสามารถใช้คลาส WebRequest หรือ WebClient ที่มีใน .NET ด้านล่างนี้เป็นตัวอย่างการใช้คลาส WebClient เนื่องจากความเรียบง่าย

using System.Net;

string url = "http://data.dot.state.mn.us/dds/det_sample.xml.gz";
string savePath = @"C:\path\to\your\det_sample.xml.gz";

using (WebClient webClient = new WebClient())
{
    webClient.DownloadFile(url, savePath);
}
  • คำอธิบาย:
    • WebClient ใช้ในการดาวน์โหลดไฟล์จากเว็บ
    • เมธอด DownloadFile ใช้รับ URL ของไฟล์ gzipped และที่อยู่ในเครื่องที่คุณต้องการบันทึก

2. การแตกเนื้อหาของไฟล์ Gzipped

หลังจากที่คุณดาวน์โหลดไฟล์ gzipped แล้ว ขั้นตอนถัดไปคือการแตกเนื้อหาของมัน สำหรับสิ่งนี้เราจะใช้คลาส GZipStream

ตัวอย่างโค้ดการแตกไฟล์

using System.IO;
using System.IO.Compression;

string gzippedFilePath = @"C:\path\to\your\det_sample.xml.gz";
string outputFilePath = @"C:\path\to\your\det_sample.xml";

using (FileStream fInStream = new FileStream(gzippedFilePath, FileMode.Open, FileAccess.Read))
{
    using (GZipStream zipStream = new GZipStream(fInStream, CompressionMode.Decompress))
    {
        using (FileStream fOutStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
        {
            byte[] tempBytes = new byte[4096];
            int bytesRead;
            while ((bytesRead = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
            {
                fOutStream.Write(tempBytes, 0, bytesRead);
            }
        }
    }
}
  • คำอธิบาย:
    • สร้าง FileStream เพื่ออ่านไฟล์ gzipped
    • จากนั้นห่อหุ้มสตรีมนี้ใน GZipStream เพื่อจัดการการแตกไฟล์
    • สุดท้ายสร้าง FileStream อีกอันหนึ่งเพื่อเขียนเนื้อหาที่แตกไฟล์ลงในไฟล์ใหม่

สรุปขั้นตอน

  1. ดาวน์โหลดไฟล์ โดยใช้ WebClient
  2. เปิดไฟล์ gzipped ด้วย FileStream
  3. ห่อหุ้มด้วย GZipStream เพื่อแตกไฟล์
  4. เขียนผลลัพธ์ ลงในไฟล์ใหม่โดยใช้ FileStream อื่น

โดยการทำตามขั้นตอนเหล่านี้ คุณสามารถทำให้กระบวนการดาวน์โหลดและแตกไฟล์ gzipped เป็นไปโดยอัตโนมัติด้วย C#

สรุป

การจัดการไฟล์ gzipped ใน C# เป็นเรื่องที่ตรงไปตรงมาหลังจากที่คุณเข้าใจคลาสและเมธอดที่จำเป็น ด้วยเพียงไม่กี่บรรทัดของโค้ด คุณสามารถดาวน์โหลดและแตกไฟล์ gzipped ที่คุณต้องการได้อย่างมีประสิทธิภาพ

สำหรับการอ่านเพิ่มเติมเกี่ยวกับการบีบอัดและการจัดการไฟล์ใน C# ขอแนะนำให้ตรวจสอบเอกสารอย่างเป็นทางการของ Microsoft.