2012-06-29 37 views
13

Tôi muốn biết cách chuyển đổi luồng thành byte.C# convert system.IO.Stream to Byte []

Tôi tìm thấy mã này, nhưng trong trường hợp của tôi nó không hoạt động:

var memoryStream = new MemoryStream(); 
paramFile.CopyTo(memoryStream); 
byte[] myBynary = memoryStream.ToArray(); 
myBinary = memoryStream.ToArray(); 

Nhưng trong trường hợp của tôi, trong dòng paramFile.CopyTo (MemoryStream) nó sẽ xảy ra không có gì, không có ngoại lệ, ứng dụng vẫn hoạt động , nhưng mã không tiếp tục với dòng tiếp theo.

Cảm ơn.

+0

Điều gì là paramFile? –

+0

Ah, xin lỗi, tệp param là tham số mà tôi nhận được trong phương thức, là SystemIO.Stream. –

Trả lời

30

Nếu bạn đang đọc một tập tin chỉ cần sử dụng File.ReadAllBytes Method:

byte[] myBinary = File.ReadAllBytes(@"C:\MyDir\MyFile.bin"); 

Ngoài ra, có không cần phải CopyTo một MemoryStream chỉ để nhận mảng byte miễn là sourceStream của bạn hỗ trợ thuộc tính Độ dài:

byte[] myBinary = new byte[paramFile.Length]; 
paramFile.Read(myBinary, 0, (int)paramFile.Length); 
+0

thực sự tôi có một luồng, không có tệp. Mặc dù dữ liệu gốc là một tệp nhưng tôi gửi tệp đó vào luồng trong WCF. Vì vậy, tôi cần chuyển đổi luồng thành một byte []. Nhưng cách này không hoạt động, vì thuộc tính chiều dài là dài, và phương thức đọc sử dụng một int. –

+1

Miễn là bạn không vượt quá 2147483647 (int.MaxValue) byte này hoạt động tốt. Nếu không, bạn phải lắp ráp mảng bằng bộ đếm. – JamieSee

26

Đây là một phương pháp khuyến nông tôi đã viết cho lớp Suối

public static class StreamExtensions 
    { 
     public static byte[] ToByteArray(this Stream stream) 
     { 
      stream.Position = 0; 
      byte[] buffer = new byte[stream.Length]; 
      for (int totalBytesCopied = 0; totalBytesCopied < stream.Length;) 
       totalBytesCopied += stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied); 
      return buffer; 
     } 
    } 
+0

Athens, tôi không cho rằng bạn có một phương pháp FromByteArray thêm nằm xung quanh? :-) Tôi đang sử dụng phương pháp của bạn, tôi chỉ cần có thể chuyển đổi nó ngay bây giờ. –

+1

Điều này có thể hữu ích. http://stackoverflow.com/questions/4736155/how-do-i-convert-byte-to-stream-in-c –

Các vấn đề liên quan