2009-10-08 13 views
15

Piszę kod, który działa w systemie Windows i wysyła plik tekstowy, który później staje się wprowadzeniem do programu w systemie Linux. Ten program zachowuje się niepoprawnie, gdy podane są pliki, które mają znaki nowej linii w CR + LF, a nie tylko LF.C++ zmienić znak nowej linii z CR + LF na LF

Wiem, że mogę używać narzędzi takich jak dos2unix, ale chciałbym pominąć dodatkowy krok. Czy można uzyskać program w języku C++ w systemie Windows, aby używać nowego wiersza systemu Linux zamiast systemu Windows?

Odpowiedz

23

Tak, należy otworzyć plik w trybie "binarnym", aby zatrzymać tłumaczenie nowej linii.

Sposób wykonania zależy od sposobu otwierania pliku.

Korzystanie fopen:

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

Korzystanie ofstream:

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

Uzgodnione. Otwórz strumień jako plik binarny i nie ma żadnego tłumaczenia. wyjście "\ n" lub std :: endl do takiego strumienia powoduje tylko podawanie liniowe. – Clifford

-1

OK, więc to nie jest chyba to, co chcesz usłyszeć, ale tutaj jest mój $ +0,02 na podstawie mojego doświadczenia z tego:

Jeśli chcesz przekazywać dane między różnymi platformami, na dłuższą metę lepiej jest użyć formatu, który nie przejmuje się wyglądem linii podziału . Jeśli są to pliki tekstowe, użytkownicy czasami będą z nimi zadzierać. Jeśli przez zawieszenie linii zakończy się niepowodzeniem aplikacji, będzie to aplikacja wymagająca intensywnej obsługi.

Byłem tam, zrobiłem to, przełączono na XML. Sprawili, że obsługa techniczna była o wiele szczęśliwsza.

+0

Gdybym tylko mógł wybrać formaty, z którymi muszę pracować ..... * głuchy śmiech *. – GiantCowFilms

Powiązane problemy