Tôi đã tạo một lớp có trách nhiệm tạo tệp văn bản trong đó mỗi dòng đại diện cho thông tin của đối tượng của lớp 'MyDataClass'. Dưới đây là một đơn giản hóa mã của tôi:StreamWriter thêm phần bổ sung vào cuối dòng
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;
}
}
Và tôi gọi lớp này như thế này:
using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
new Generator(file).Generate();
}
Khi tôi chạy các ứng dụng trên visual studio (tôi thử nghiệm với chạy (Ctrl + F5), gỡ lỗi (F5), với chế độ gỡ lỗi và phát hành) tất cả đều theo kế hoạch. Nhưng tôi xuất bản các ứng dụng trong một máy chủ IIS và bây giờ StreamWriter lớp đặt thêm \ r trước khi kết thúc của dòng.
Kiểm tra nó ra đọc thập lục phân của cả hai tập tin được tạo:
Chạy trong Visual Studio: http://www.jonataspiazzi.xpg.com.br/hex_vs.bmp
Chạy trong IIS: http://www.jonataspiazzi.xpg.com.br/hex_iis.bmp
Một số điều tôi đã kiểm tra:
Viết
line
biến (trongvar line = AnotherClass.GetLineFrom(item);
) trong nhật ký để xem liệu thêm '\ r' có bị loại bởi lớpAnotherClass
hay không.
Không kết quả là gì, lần cuối cùng trong số line
là một char thông thường như mong đợi (ví dụ ở trên là khoảng trắng).
Viết mã khác để xem sự cố có chung cho tất cả các phiên bản IIS StreamWriter hay không.
Tôi cố gắng này:
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;
Trong trường hợp này mã hoạt động tốt cho cả hai visual studio và IIS.
Tôi làm việc này trong 3 ngày, tôi đã thử mọi thứ mà bộ não của tôi có thể nghĩ. Có ai có manh mối nào cho những gì tôi có thể thử không?
CẬP NHẬT
Nhận kì quặc! Tôi cố gắng để thay thế dòng _streamWriter.WriteLine(line);
với:
_streamWriter.Write(linhaTexto + Environment.NewLine);
Và thậm chí tệ hơn:
_streamWriter.Write(linhaTexto + "\r\n");
Cả hai tiếp tục tạo ra thêm \r
nhân vật.
tôi cố gắng thay thế với điều này:
_streamWriter.Write(linhaTexto + "#\r\n#");
Và nhận được:
http://www.jonataspiazzi.xpg.com.br/hex_sharp.bmp
Điều gì xảy ra nếu bạn cố gắng xóa mã hóa? – Steve
Lỗi vẫn còn. Tôi đã thử mà không cần mã hóa, với 'Defaul', với' UTF8' và với '" ISO-8859-15 "'. Tất cả đều cho tôi kết quả tương tự. –
Có thể thêm \ r trong quá trình Truyền tệp từ máy chủ không? –