what net filebytes convertir convert bytes array archivo c# stream

c# - net - Convertir StreamReader en byte



save stream to file c# (5)

Para todos los que dicen obtener los bytes, MemoryStream a MemoryStream , etc. Si no se espera que el contenido sea más grande de lo que razonablemente se espera que permita la memoria de la computadora, ¿por qué no usar StreamReader ''s integrado en ReadLine() o ReadToEnd() ? Vi que estos ni siquiera fueron mencionados, y hacen todo por ti.

Tenía un caso de uso en el que solo quería almacenar la ruta de un archivo SQLite desde un FileDialogResult que el usuario selecciona durante el proceso de sincronización / inicialización. Mi programa luego necesita usar esta ruta cuando se ejecuta para los procesos de aplicación normales. Tal vez no sea la forma ideal de capturar / reutilizar la información, pero no es muy diferente de escribir / leer desde un archivo .ini. Simplemente no quería configurar uno para un valor. Así que lo acabo de leer desde un archivo de texto plano de una sola línea. Esto es lo que hice:

string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if (!filePath.EndsWith(@"/")) temppath += @"/"; // ensures we have a slash on the end filePath = filePath.Replace(@"//", @"/"); // Visual Studio escapes slashes by putting double-slashes in their results - this ensures we don''t have double-slashes filePath += "SQLite.txt"; string path = String.Empty; FileStream fs = new FileStream(filePath, FileMode.Open); StreamReader sr = new StreamReader(fs); path = sr.ReadLine(); // can also use sr.ReadToEnd(); sr.Close(); fs.Close(); fs.Flush(); return path;

Si realmente necesitas un byte[] lugar de una string por alguna razón, usando mi ejemplo, siempre puedes:

byte[] toBytes = Encoding.ASCII.GetBytes(path);

y regresar a toBytes lugar de path .

Obtengo el resultado del objeto streamreader.

Quiero convertir el resultado en byte [].

¿Cómo puedo convertir el streamreader en byte []?

Gracias


También puedes usar CopyTo:

var ms = new MemoryStream(); yourStreamReader.BaseStream.CopyTo(ms); // blocking call till the end of the stream ms.GetBuffer().CopyTo(yourArray, ms.Length);

o

var ms = new MemoryStream(); var ct = yourStreamReader.BaseStream.CopyToAsync(ms); await ct; ms.GetBuffer().CopyTo(yourArray, ms.Length);


Un StreamReader es para texto, no para bytes simples. No use un StreamReader y, en su lugar, read directamente de la transmisión subyacente.


Simplemente arroje todo lo que lee en un MemoryStream y obtenga el conjunto de bytes al final. Como se señaló, debe leer del flujo subyacente para obtener los bytes sin procesar.

var bytes = default(byte[]); using (var memstream = new MemoryStream()) { var buffer = new byte[512]; var bytesRead = default(int); while ((bytesRead = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0) memstream.Write(buffer, 0, bytesRead); bytes = memstream.ToArray(); }

O si no desea administrar los búferes:

var bytes = default(byte[]); using (var memstream = new MemoryStream()) { reader.BaseStream.CopyTo(memstream); bytes = memstream.ToArray(); }


Puedes usar este código: No deberías usar este código:

byte[] bytes = streamReader.CurrentEncoding.GetBytes(streamReader.ReadToEnd());

Por favor, vea el comentario de esta respuesta en cuanto a por qué. Dejaré la respuesta, para que la gente sepa sobre los problemas con este enfoque, porque no lo hice hasta ahora.