2009-10-08 35 views
15

Tôi đang viết mã chạy trong Windows và xuất ra tệp văn bản mà sau này trở thành đầu vào cho một chương trình trong Linux. Chương trình này hoạt động không chính xác khi các tệp đã có các dòng mới là CR + LF chứ không chỉ là LF.C++ thay đổi dòng mới từ CR + LF thành LF

Tôi biết rằng tôi có thể sử dụng các công cụ như dos2unix, nhưng tôi muốn bỏ qua bước bổ sung. Có thể lấy một chương trình C++ trong Windows để sử dụng dòng mới của Linux thay vì Windows không?

Trả lời

23

Có, bạn phải mở tệp ở chế độ "nhị phân" để dừng dịch dòng mới.

Cách bạn thực hiện điều đó phụ thuộc vào cách bạn mở tệp.

Sử dụng fopen:

FILE* outfile = fopen("filename", "wb"); 

Sử dụng ofstream:

std::ofstream outfile("filename", std::ios_base::binary | std::ios_base::out); 
+1

Đồng ý. Mở luồng dưới dạng nhị phân và không có bản dịch nào diễn ra. đầu ra của một trong hai '\ n' hoặc std :: endl cho luồng như vậy chỉ dẫn đến một dòng cấp dữ liệu. – Clifford

-1

OK, vì vậy điều này có lẽ không phải những gì bạn muốn nghe, nhưng đây là của tôi 0.02 $ dựa trên kinh nghiệm của tôi với điều này:

Nếu bạn cần chuyển dữ liệu giữa các nền tảng khác nhau, về lâu dài, bạn có thể nên sử dụng định dạng không quan tâm đến những ngắt dòng trông như thế nào . Nếu đó là tệp văn bản, người dùng đôi khi sẽ gây rối với họ. Nếu bằng cách làm rối tung dòng kết thúc, chúng sẽ khiến ứng dụng của bạn thất bại, đây sẽ là một ứng dụng hỗ trợ chuyên sâu.

Đã ở đó, thực hiện việc đó, chuyển sang XML. Làm cho những người hỗ trợ hạnh phúc hơn rất nhiều.

+0

Nếu chỉ tôi có thể chọn các định dạng tôi phải làm việc với ..... * cười cười *. – GiantCowFilms

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