cuốn sách gpt4 ai đã làm

Dùng một lần phụ thuộc vào Dùng một lần khác

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 22:49:20 25 4
mua khóa gpt4 Nike

Tôi có một ứng dụng xử lý luồng tệp dựa trên danh sách các chuỗi, có thể là tệp trên đĩa hoặc tệp trong tệp Zip. Để làm sạch mã, tôi muốn cấu trúc lại quá trình mở tệp.

Tôi đã tạo một phương thức trả về Luồng nội dung tệp nhưng vì luồng phụ thuộc vào ZipFile IDisposable nên khi tôi đọc luồng, ZipFile đã bị hủy phân bổ và một ngoại lệ được đưa ra.

khoảng trống Chính()
{
sử dụng (varstream = OpenFileForImport("zipfile.zip;insidefile.txt"))
StreamReader mới(stream).ReadToEnd(); // Ngoại lệ

sử dụng (varstream = OpenFileForImport("outside.txt"))
StreamReader mới(stream).ReadToEnd(); // Hoạt động
}
Luồng tĩnh công khai OpenFileForImport(chuỗi filePath)
{
var path = Path.Combine(basefolder, filePath);

if (path.Contains(";"))
{
var parts = path.Split(';');
var zipPath = parts[0];

//Lỗi kiểm tra logic để đảm bảo tệp zip tồn tại và hợp lệ...
sử dụng (var zip = ZipFile.OpenRead(zipPath))
sử dụng (var entry = zip.GetEntry(parts[1]))
{
//Lỗi kiểm tra logic để đảm bảo tệp bên trong tồn tại trong tệp zip.
trả lại mục nhập.Open();
}

}

var file = new FileInfo(path);
if (file != null)
trả về tập tin.OpenRead();

return null;

}

Tôi có thể bắt đầu từ ziplối vào Xóa các mệnh đề sử dụng khỏi tuyên bố, nhưng tôi nghi ngờ chúng sẽ bị loại bỏ. Có sẵn mô hình nào để trả lại đồ dùng một lần khi phụ thuộc vào đồ dùng một lần khác không?

câu trả lời hay nhất

Thay vì trả lại luồng trực tiếp, hãy trả về một đối tượng vứt đi cung cấp cho bạn luồng bạn muốn xử lý nhưng sẽ dọn sạch luồng khi bạn xử lý luồng đóvà các nguồn lực phụ thuộc khác:

lớp công khai NameToBeDetermined: IDisposable
{
zip ZipFile riêng tư;
Luồng công khai { get }
public NameToBeDetermined(ZipFile zip, Luồng phát trực tuyến)
{
this.zip = zip;
Luồng = luồng;
}
khoảng trống công khai Vứt bỏ()
{
zip.Dispose();
Stream.Dispose();
}
}

sau đó quay lạicái đó, chứ không phải chính luồng đó. Nếu xứng đáng với thời gian của bạn, bạn có thể biến trình bao bọc này thành Suối chính nó, nó chỉ chuyển đổi tất cả Suối phương thức này chuyển tiếp vào luồng tổng hợp nhưng thực hiện thêm công việc khi xử lý. Có đáng để dành thời gian tạo một trình bao bọc phức tạp hơn thay vì cấp cho người gọi quyền truy cập vào không. Suối Tài sản tùy thuộc vào bạn.

Về c# - Đồ dùng một lần phụ thuộc vào Đồ dùng một lần khác, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/48214328/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress