Read
và Seek
là các phương pháp trên loại Stream
, không chỉ FileStream
. Nó chỉ là không phải mọi luồng đều hỗ trợ chúng. (Cá nhân tôi thích sử dụng số Position
property qua số điện thoại Seek
, nhưng chúng sẽ đun sôi xuống cùng một thứ.)
Nếu bạn muốn có dữ liệu trong bộ nhớ đổ nó vào một tệp, tại sao không chỉ đọc tất cả vào một MemoryStream
? Điều đó hỗ trợ tìm kiếm. Ví dụ:
public static MemoryStream CopyToMemory(Stream input)
{
// It won't matter if we throw an exception during this method;
// we don't *really* need to dispose of the MemoryStream, and the
// caller should dispose of the input stream
MemoryStream ret = new MemoryStream();
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
ret.Write(buffer, 0, bytesRead);
}
// Rewind ready for reading (typical scenario)
ret.Position = 0;
return ret;
}
Sử dụng:
using (Stream input = ...)
{
using (Stream memory = CopyToMemory(input))
{
// Seek around in memory to your heart's content
}
}
này cũng tương tự như việc sử dụng các phương pháp Stream.CopyTo
giới thiệu trong .NET 4.
Nếu bạn thực sự muốn ghi vào hệ thống tập tin, bạn có thể làm một cái gì đó tương tự như lần đầu tiên ghi vào tập tin sau đó tua lại dòng ... nhưng sau đó bạn sẽ cần phải chăm sóc xóa nó sau đó, để tránh xả rác đĩa của bạn với các tập tin.
Nguồn
2010-09-22 12:17:49
Tại sao không truyền tác phẩm? Loại đối tượng Stream đến của bạn là gì? –
Thao tác vô lý. Nếu luồng không hỗ trợ 'Read/Seek' - thì việc truyền sẽ không giúp ích gì. – zerkms