Символ новой строки
От: YourLastSong  
Дата: 11.09.11 16:50
Оценка:
Здравствуйте, уважаемые господа.

В связи с тем, что в разных ОС перевод строки происходит разным образом (\r\n в вин, а также \n или \r в других ОС), каким образом лучше всего будет осуществлять кросс-платформенность, например, для файлов? Просто писать \r\n постоянно вместо \n или \r, да?

А как быть с std::endl тогда? Что он делает в данном случае — \r\n или как?

Заранее благодарю за возможные ответы.
Re: Символ новой строки
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.09.11 17:06
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>В связи с тем, что в разных ОС перевод строки происходит разным образом (\r\n в вин, а также \n или \r в других ОС), каким образом лучше всего будет осуществлять кросс-платформенность, например, для файлов? Просто писать \r\n постоянно вместо \n или \r, да?


YLS>А как быть с std::endl тогда? Что он делает в данном случае — \r\n или как?


Вот это и делает — пишет, что надо, в зависимости от системы.
Re: Символ новой строки
От: Centaur Россия  
Дата: 11.09.11 17:35
Оценка: 1 (1)
Здравствуйте, YourLastSong, Вы писали:

YLS>В связи с тем, что в разных ОС перевод строки происходит разным образом (\r\n в вин, а также \n или \r в других ОС), каким образом лучше всего будет осуществлять кросс-платформенность, например, для файлов? Просто писать \r\n постоянно вместо \n или \r, да?


Открываешь файл или поток в текстовом режиме, пишешь в него всегда \n, стандартная библиотека прозрачно транслирует в то, чем принято разделять строки на данной системе.

YLS>А как быть с std::endl тогда? Что он делает в данном случае — \r\n или как?


std::endl пишет в поток \n. Стандартная библиотека прозрачно транслирует его в то, чем принято разделять строки на данной системе.
Re[2]: Символ новой строки
От: MasterZiv СССР  
Дата: 11.09.11 18:48
Оценка: 1 (1) +1
On 11.09.2011 21:06, Pzz wrote:

> YLS>А как быть с std::endl тогда? Что он делает в данном случае — \r\n или как?

>
> Вот это и делает — пишет, что надо, в зависимости от системы.

Делает он другое. std::endl пишет конец строки в поток и flush-ит его.

А символ конца строки выводить кроссплатформенно очень просто:

fprintf( file, "\n" );

или

std::cout << "\n" ;

Если поток ТЕКСТОВЫЙ, CRT сама позаботится о том, как физически вывести конец
строки на даной платформе.
Текстовость потока задаётся при открытии (возможно, можно поменять режим и позже).
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Символ новой строки
От: YourLastSong  
Дата: 11.09.11 20:25
Оценка:
MZ>CRT сама позаботится о том, как физически вывести конец
MZ>строки на даной платформе.

Но ведь это же в том случае, если я создаю этот файл через программу? Мне интересно также, как откр. файл на другой ОС, если я при этом создавал файл, например в вин заранее?
Re: Символ новой строки
От: Centaur Россия  
Дата: 12.09.11 01:47
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>А как быть с std::endl тогда? Что он делает в данном случае — \r\n или как?


Про различия между endl и просто выводом \n также читать статью: Scott Meyers, “The little endl that couldn’t”.
Re: Символ новой строки
От: Uzumaki Naruto Ниоткуда  
Дата: 12.09.11 04:23
Оценка:
Не морочишь голову, большинство source-safe систем и ssh имею автоматическую конвертацию в зависимости от целевой платформы...
Так то не нужно заморачиваться.

Re[4]: Символ новой строки
От: MasterZiv СССР  
Дата: 12.09.11 07:58
Оценка:
On 12.09.2011 0:25, YourLastSong wrote:

> MZ>CRT сама позаботится о том, как физически вывести конец

> MZ>строки на даной платформе.
>
> Но ведь это же в том случае, если я создаю этот файл через программу? Мне

Не важно кто создаёт файл, важно, кто его открывает. Это режим работы открытого
файла, ты его можешь задавать.

> интересно также, как откр. файл на другой ОС, если я при этом создавал файл,

> например в вин заранее?

Да так же.

На самом деле то, о чём ты говоришь, это даже не принадлежность
какой-то операционки. Это формат работы конкретных программ.
Некоторые работают так, некоторые -- по-другому, а хорошие
понимают и так, и так. Есть конечно общяя традиция на какой-то
операционке, но это лишь традиция, её часто нарушают.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.