我創建了一個類,負責生成一個文本文件,其中每行代表「MyDataClass」類的對象的信息。下面是我的代碼的簡化:StreamWriter在該行的末尾添加了一個額外的 r
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;
}
}
我調用這個類是這樣的:
using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
new Generator(file).Generate();
}
當我運行Visual Studio中的應用程序(我與運行測試(按Ctrl + F5),調試(F5),調試和發佈模式)都按照計劃進行。但是我在IIS服務器上發佈應用程序,現在StreamWriter類在行尾之前放置了一個額外的\ r。
檢查出來兩個生成的文件的十六進制閱讀:
在Visual Studio中運行: http://www.jonataspiazzi.xpg.com.br/hex_vs.bmp
運行在IIS: http://www.jonataspiazzi.xpg.com.br/hex_iis.bmp
我已經查了一些事情:
寫下
line
變量(在var line = AnotherClass.GetLineFrom(item);
)在日誌中查看是否額外'\ r'未被類AnotherClass
排除。
沒有造成什麼,在line
的最後一個字符是一個普通的字符像預期的(例如,在上面的空間)。
編寫另一個代碼以查看該問題是否適用於所有IIS StreamWriter實例。
我嘗試這樣做:
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;
在這種情況下,代碼非常適用於Visual Studio和IIS。
我在這裏呆了3天,我已經嘗試了我的大腦可以思考的一切。有沒有人有任何線索我可以嘗試?
UPDATE
獲取怪異!我嘗試更換線_streamWriter.WriteLine(line);
:
_streamWriter.Write(linhaTexto + Environment.NewLine);
更糟糕:
_streamWriter.Write(linhaTexto + "\r\n");
兩個保持產生額外的\r
字符。
我嘗試用這個代替:
_streamWriter.Write(linhaTexto + "#\r\n#");
並獲得:
http://www.jonataspiazzi.xpg.com.br/hex_sharp.bmp
如果您嘗試刪除編碼,會發生什麼情況? – Steve
錯誤依然存在。我試着用'UTF8'和''ISO-8859-15''編碼''Defaul'。所有的結果都一樣。 –
在從服務器進行文件傳輸期間是否可能添加了額外的\ r? –