Ho creato una classe con la responsabilità di generare un file di testo in cui ogni riga rappresenta l'informazione di un oggetto della classe "MyDataClass". Qui di seguito è una semplificazione del mio codice:StreamWriter aggiunge un r aggiuntivo alla fine della riga
public class Generator
{
private readonly Stream _stream;
private readonly StreamWriter _streamWriter;
private readonly List<MyDataClass> _items;
public Generator(Stream stream)
{
_stream = stream;
_streamWriter = new StreamWriter(_stream, Encoding.GetEncoding("ISO-8859-1"));
}
public void Generate()
{
foreach (var item in _items)
{
var line = AnotherClass.GetLineFrom(item);
_streamWriter.WriteLine(line);
}
_streamWriter.Flush();
_stream.Position = 0;
}
}
e chiamo questa classe come questa:
using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
new Generator(file).Generate();
}
Quando eseguo l'applicazione su Visual Studio (I test con run (Ctrl + F5), eseguire il debug (F5), con la modalità di debug e rilascio) tutto va secondo il piano. Ma pubblico l'applicazione su un server IIS e ora la classe StreamWriter mette un \ r in più prima della fine della riga.
Check it out la lettura esadecimale di entrambi i file generati:
esecuzione in Visual Studio: http://www.jonataspiazzi.xpg.com.br/hex_vs.bmp
esecuzione in IIS: http://www.jonataspiazzi.xpg.com.br/hex_iis.bmp
Alcune cose che ho già controllato:
Scrivi il
line
variabile (invar line = AnotherClass.GetLineFrom(item);
) in un registro per verificare se un extra "\ r" non è stato escluso dalla classeAnotherClass
.
Non ha generato nulla, l'ultimo carattere in line
è un carattere normale come previsto (nell'esempio sopra è uno spazio).
Scrivere un altro codice per vedere se il problema è generale per tutte le istanze di IIS StreamWriter.
ho provato questo:
var ms = new MemoryStream();
var sw = new StreamWriter(ms, Encoding.GetEncoding("ISO-8859-1"));
sw.WriteLine("Test");
sw.WriteLine("Of");
sw.WriteLine("Lines");
sw.Flush();
ms.Position = 0;
In questo caso il codice funziona bene sia per lo studio visivo e IIS.
Sono in questo per 3 giorni, ho già provato tutto ciò che il mio cervello può pensare. Qualcuno ha qualche idea su cosa posso provare?
UPDATE
Get più strano! Io cerco di sostituire la linea _streamWriter.WriteLine(line);
con:
_streamWriter.Write(linhaTexto + Environment.NewLine);
E ancora peggio:
_streamWriter.Write(linhaTexto + "\r\n");
Entrambi mantengono la generazione del \r
carattere aggiuntivo.
cerco sostituirlo con questo:
_streamWriter.Write(linhaTexto + "#\r\n#");
E ottenere:
http://www.jonataspiazzi.xpg.com.br/hex_sharp.bmp
Cosa succede se tenti di rimuovere la codifica? – Steve
L'errore rimane. Ho provato senza codifica, con 'Defaul', con' UTF8' e con '" ISO-8859-15 "'. Tutti mi danno lo stesso risultato. –
E 'possibile che il \ r aggiuntivo sia aggiunto durante un Trasferimento file dal server? –