Trích xuất nội dung CSV từ ZIP trong .NET
Sử dụng Aspose.ZIP for .NET để kiểm tra kho lưu trữ ZIP và khôi phục chỉ các tệp CSV mà ứng dụng C# cần. Trên trang này, trích xuất nghĩa là chọn tệp .csv từ vùng chứa ZIP và ghi vào đích được kiểm soát; Aspose.ZIP không diễn giải hoặc chuyển đổi nội dung bên trong tệp.
Trích xuất có chọn lọc phù hợp cho quy trình nhập tài liệu, tài nguyên đa phương tiện, dữ liệu kỹ thuật, gói dự án và xử lý nội dung tự động. Ứng dụng có thể bỏ qua các mục không liên quan, thực thi chính sách đầu ra và tài nguyên, rồi chuyển các tệp đã được chấp thuận sang bước tiếp theo mà không cần giải nén toàn bộ kho lưu trữ.
Cách trích xuất tệp CSV từ ZIP bằng C#
Cài đặt gói Aspose.ZIP for .NET và nhập namespace Aspose.Zip. Siêu dữ liệu kho lưu trữ có sẵn trước khi ghi bất kỳ nội dung nào, nhờ đó ứng dụng có thể đánh giá ArchiveEntry.Name, ArchiveEntry.IsDirectory và ArchiveEntry.UncompressedSize như một phần của chính sách chấp nhận.
Package Manager Console Command
PM> Install-Package Aspose.Zip
Mở ZIP bằng Archive, duyệt Archive.Entries, chọn các mục có phần mở rộng .csv và gọi ArchiveEntry.Extract cho từng đích đã được chấp thuận. Ví dụ rút gọn đường dẫn trong kho lưu trữ thành tên tệp cuối cùng để mục không thể thoát khỏi thư mục đích.
Các bước khôi phục tệp CSV trong C#
- Xác định đường dẫn ZIP nguồn và tạo thư mục đầu ra tách biệt.
- Mở gói bằng lớp Archive.
- Duyệt Archive.Entries thay vì mở rộng mọi mục.
- Chọn các mục có tên tệp cuối cùng dùng phần mở rộng .csv.
- Tạo đường dẫn đích luôn nằm dưới gốc đầu ra đã được chấp thuận.
- Từ chối các mục vượt quá giới hạn kích thước sau khi giải nén.
- Lưu từng mục được chấp nhận bằng ArchiveEntry.Extract.
Yêu cầu hệ thống
Trước khi chạy ví dụ, hãy bảo đảm môi trường có:
- Môi trường chạy .NET được hỗ trợ trên Windows, Linux hoặc macOS.
- Visual Studio, JetBrains Rider, Visual Studio Code hoặc môi trường phát triển C# khác.
- Aspose.ZIP for .NET được cài qua NuGet hoặc được tham chiếu như một assembly.
- Quyền đọc kho lưu trữ nguồn và quyền ghi vào thư mục đích.
- Giới hạn lưu trữ và thực thi phù hợp cho đầu vào nén không đáng tin cậy.
Ví dụ C#: chọn tệp CSV trong kho lưu trữ ZIP
Mã mở một gói ZIP, lọc các mục không phải thư mục theo phần mở rộng được chấp thuận và ghi các tệp khớp vào một thư mục đầu ra. Việc làm phẳng đường dẫn trong kho lưu trữ giúp ví dụ gọn hơn và ngăn các đoạn thư mục cha kiểm soát đích ghi. Trong mã production, bạn cũng nên xác định chính sách tất định cho các tên đầu ra trùng lặp.
Trích xuất tệp CSV từ ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-csv");
string[] allowedExtensions = { ".csv" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
if (entry.IsDirectory) continue;
string fileName = Path.GetFileName(entry.Name);
if (string.IsNullOrWhiteSpace(fileName)) continue;
string extension = Path.GetExtension(fileName);
if (!Array.Exists(
allowedExtensions,
value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
{
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Mục '{fileName}' vượt quá giới hạn trích xuất 100 MB.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Ghi chú triển khai cho tệp CSV
Phần mở rộng khớp chỉ xác định tệp ứng viên; nó không chứng minh rằng nội dung có thể đọc được, hợp lệ hoặc an toàn. Hãy xác thực tệp đã trích xuất bằng thành phần hiểu định dạng CSV trước khi xem trước, chuyển đổi hoặc xử lý tiếp.Ví dụ làm phẳng đường dẫn trong kho lưu trữ cho các tệp thông thường. Nếu hai mục được chấp nhận có cùng tên cuối cùng, ArchiveEntry.Extract có thể ghi đè đầu ra hiện có, vì vậy hãy chọn chính sách xử lý xung đột rõ ràng: từ chối bản trùng, tạo tên duy nhất hoặc giữ cây thư mục tương đối đã được xác thực. Dùng đích riêng cho mỗi tác vụ để các yêu cầu đồng thời không trộn lẫn kết quả.
Cân nhắc về bảo mật và quyền riêng tư
Hãy xem tên kho lưu trữ và payload là dữ liệu không đáng tin cậy. Không bao giờ nối trực tiếp ArchiveEntry.Name vào đường dẫn đích, vì đường dẫn tuyệt đối và các đoạn thư mục cha có thể ghi ra ngoài thư mục dự kiến. Ví dụ chuẩn dùng Path.GetFileName; các quy trình cần giữ thư mục phải phân giải đường dẫn đầy đủ và xác minh rằng nó vẫn nằm dưới gốc đã được chấp thuận.Đặt giới hạn cho kích thước đầu vào nén, kích thước sau giải nén theo từng mục và tổng thể, số lượng mục, thời gian xử lý và các tác vụ đồng thời. Trích xuất vào vùng lưu trữ tạm thời bị hạn chế, dọn dẹp đầu ra một phần sau lỗi, quét tệp khi ứng dụng yêu cầu và tránh ghi log tên tệp riêng tư hoặc nội dung tài liệu.
FAQ về trích xuất CSV
Làm cách nào để chỉ trích xuất tệp CSV từ kho lưu trữ ZIP trong C#?
Mở ZIP bằng Archive, duyệt Archive.Entries, khớp phần mở rộng .csv và gọi Extract cho từng đường dẫn đích được chấp nhận.
Aspose.ZIP có xác thực nội dung của tệp CSV đã trích xuất không?
Không. Phần mở rộng chỉ là bộ lọc bước đầu. Hãy xác thực tệp đã khôi phục bằng thành phần hiểu nội dung CSV.
Có thể dùng cùng mẫu chọn với vùng chứa 7Z, RAR hoặc TAR không?
Có, nhưng hãy mở từng vùng chứa bằng lớp lưu trữ Aspose.ZIP tương ứng. Kiểu mục và phương thức trích xuất có sẵn có thể khác nhau theo định dạng lưu trữ.
Nên xử lý các tên tệp CSV trùng lặp như thế nào?
Chọn quy tắc trước khi trích xuất: từ chối bản trùng, tạo tên duy nhất hoặc giữ cấu trúc thư mục tương đối đã được xác thực.
Hướng dẫn trích xuất tệp liên quan
Duyệt các trang trích xuất C# cho những tệp và tài nguyên thường được phân phối trong gói ZIP.