c# stringbuilder streamwriter

c# - Obligando a StreamWriter a cambiar la codificación



stringbuilder (4)

Estoy intentando guardar un archivo usando DialogResult y StringBuilder . Después de hacer el texto, estoy llamando al siguiente código para guardar el archivo:

if (dr == DialogResult.OK) { StreamWriter sw = new StreamWriter(saveFileDialog1.FileName); sw.Write(sb.ToString()); sw.Close(); }

Intenté agregar el segundo parámetro a StreamWriter como Encoding.UTF8 pero como el primer argumento es una string lugar de una Stream , no la compila.

¿Cómo puedo convertir esa cadena en un flujo para poder pasar el segundo parámetro como codificación?

La razón de esto, es que en alguna parte de mi texto tengo µ pero cuando se guarda el archivo, se muestra como μ así que µ se está desquiciando!

Gracias


Existe un constructor StreamWriter (ruta de cadena, apéndice bool, codificación de codificación) . ¿Podría simplemente especificar explícitamente el indicador de anexión también?

Dije que deberías envolver tu StreamWriter en un using también, es decir

if (dr == DialogResult.OK) { using(StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF8)) { sw.Write(sb.ToString()); sw.Close(); } }

aunque de manera realista esto no hará ninguna diferencia aquí. Esto efectivamente pone a prueba / finalmente el código para que el StreamWriter se limpie (llamará sw.Dispose() incluso si se sw.Dispose() una excepción entretanto. (Algunas personas dirán que esto también significa que ya no es necesario el .Close ya que el Dispose se encargará de eso también, pero prefiero tenerlo de todos modos.)


Hay un constructor para nombre de archivo, appendMode, codificación.

Con un bloque de using adecuado parece:

if (dr == DialogResult.OK) { using (StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF8)) { sw.Write(sb.ToString()); //sw.Close(); } }


Sólo envuélvalo en un FileStream .

StreamWriter sw = new StreamWriter( new FileStream(saveFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite), Encoding.UTF8 );

Si desea adjuntar, use FileMode.Append en FileMode.Append lugar.

También debe llamar a Dispose() en un bloque try/finally , o usar un bloque using para eliminar el objeto cuando excede el alcance de using :

using( var sw = new StreamWriter( new FileStream(saveFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite), Encoding.UTF8 ) ) { sw.Write(sb.ToString()); }

Esto cerrará correctamente y eliminará las secuencias en todas las rutas de excepción.


establecer la codificación UTF8 trabajando con fuente árabe es lo mejor que hice:

using (var sw = new StreamWriter( new FileStream(temporaryFilePath, FileMode.Create, FileAccess.ReadWrite), Encoding.UTF8)) { sw.Write(sb.ToString()); } )