2010-07-19 32 views
5

Tôi có một ứng dụng giao diện điều khiển rất đơn giản tạo tệp văn bản. Dưới đây là bản tóm tắt của mã:StreamWriter đang viết trả về vận chuyển?

StreamWriter writer = File.CreateText("c:\\temp.txt"); 
foreach (blah...) 
{ 
    writer.Write(body.ToString() + "\n"); 
    writer.Flush(); 
} 
writer.Close(); 

Khách hàng đang xác nhận có lợi nhuận vận chuyển ở cuối mỗi dòng. Những lợi nhuận vận chuyển này đến từ đâu?

Cập nhật: Sau khi mở trong trình chỉnh sửa nhị phân VS và Notepad ++, không có sự xuất hiện của 0d 0a. Tôi sẽ quay lại khách hàng.

+2

Chúng đang sử dụng để đọc tệp để kiểm tra điều này? – ChrisF

+5

Bạn nói "khách hàng đang xác nhận quyền sở hữu ..." Bạn đã tự kiểm tra chưa? –

+0

Dan, tiện ích tốt để xem những ký tự đặc biệt này là gì? –

Trả lời

3

Mở tệp trong trình chỉnh sửa nhị phân Visual Studio (File.Open.File, nhấp vào mũi tên xuống trên nút Mở, chọn Mở bằng ... và chọn Trình chỉnh sửa nhị phân) và tìm kiếm 0D byte. Nếu không có mặt, sau đó một trong hai:

  • khách hàng của bạn có thể không nói lên sự khác biệt giữa một thức ăn đường và trở về vận chuyển,

  • phương pháp truyền dẫn của bạn được sửa đổi file en-tuyến đường. Có bất kỳ nhị phân FTP/ascii không khớp không?

Nếu có 0D byte, sau đó họ có mặt trong biến body của bạn.

+2

Hoặc ứng dụng khách đang mở tệp bằng công cụ/chức năng tự động thay thế \ n với \ r \ n. Nhiều trình soạn thảo văn bản của Windows làm như vậy. –

+0

Điều này là tốt. Tôi đã tìm thấy sự xuất hiện của 0d 0a giữa các dòng khi mở trong trình soạn thảo nhị phân VS nhưng không phải với Notepad ++. Vì vậy, nó phải tồn tại trong biến cơ thể? Tôi sẽ cập nhật bài đăng gốc của tôi với mã. –

+0

FYI, khách hàng không biết họ đang nói gì vì tập tin đó không có bất kỳ trở lại vận chuyển nào. –

1

Các "\n" vào cuối mỗi write gọi

EDIT: Tôi biết đây là một dòng mới, không phải là một vận chuyển trở lại nhưng tôi đặt cược bất kỳ tiền khách hàng được nhận được nhầm lẫn giữa hai và nó thực sự này đang gây ra sự cố

+6

Đó là nguồn cấp dữ liệu dòng chứ không phải trả về vận chuyển. – BoltClock

+4

'\ n' là nguồn cấp dữ liệu dòng. '\ r' là vận chuyển trở lại. – ChrisF

+0

@BoltClock, @ChrisF - Tôi biết, nhưng trừ khi có một sự trở lại carraige ở phần cuối của cơ thể, đây sẽ là những gì khách hàng phàn nàn về – w69rdy

1

Trong mã của bạn, bạn đặt nguồn cấp dữ liệu dòng (\ n).

Khách hàng của bạn đang nói về việc trả lại vận chuyển (\ r). Có lẽ khách hàng của bạn đang sử dụng nguồn cấp dữ liệu cho mỗi lần gửi hàng?

0

Khách hàng có phân biệt giữa CR và LF không? Là tuôn ra() cần thiết? Bạn đang quá tải bộ đệm nếu bạn không tuôn ra?

Trừ khi bạn có một số lượng lớn văn bản, bạn có thể tìm thêm sử dụng trong việc tạo StringBuilder để định dạng văn bản chính xác như bạn muốn bằng \ n, \ r, \ t hoặc bất cứ điều gì và sau đó bơm trực tiếp vào StreamWriter .

0

Nếu mỗi body ký tự đầu tiên của chuỗi là '\ r', nó sẽ giải thích những gì bạn đang thấy.

0

Bạn đã kiểm tra xem body cũng kết thúc bằng các ký tự bạn không muốn in chưa? Đây là nguồn vấn đề tiềm năng khác.

3

Tôi đã kiểm tra mã của bạn.

alt text http://img830.imageshack.us/img830/5443/18414385.png

Mã bạn được đăng không có bất kì kí tự xuống dòng (0D) chỉ dòng mới (0A). Một cái gì đó khác là tạo ra các vận chuyển trở lại hoặc khách hàng không biết những gì một vận chuyển trở lại thực sự là.

Các vấn đề liên quan