Изменение станд.:: endl для произведения CR+LF вместо LF

string просто псевдоним для System.String. Компилятор будет рассматривать их тождественно.

единственным практическим различием является подсветка синтаксиса, как Вы упоминаете, и что необходимо записать using System, если Вы используете String.

10
задан Community 23 May 2017 в 12:08
поделиться

5 ответов

Открытие файла в текстовом режиме должно привести к преобразованию std :: endl в соответствующее окончание строки для вашей платформы. Ваша проблема в том, что новая строка подходит для вашей платформы, но файлы, которые вы создаете, не предназначены для вашей платформы.

Я не уверен, как вы планируете перегрузить или изменить endl , и изменение его поведения, безусловно, удивит любого разработчика, который плохо знаком с вашим проектом. Я бы рекомендовал переключиться на win_endl (должен быть простой поиск и замена) или, возможно, переключиться со стандартного ostream на поток фильтрации Boost.Iostreams , чтобы выполнить преобразование за вас .

10
ответ дан 3 December 2019 в 15:35
поделиться

std :: endl в основном:

std::cout << "\n" << std::flush;

Так что просто используйте вместо него "\ r \ n" и опустите сброс. Это тоже быстрее!

Из файла заголовка ostream на endl:

Этот манипулятор часто по ошибке используется, когда требуется простой перевод строки, что приводит к снижению производительности буферизации.

10
ответ дан 3 December 2019 в 15:35
поделиться

Не следует использовать \ r \ n. Просто используйте \ n, но затем откройте поток в «текстовом» режиме, который выполнит преобразование за вас. Возможно, вас не волнует кроссплатформенность, но это официальный способ сделать это.

Таким образом, один и тот же код будет выдавать \ n в unix, \ r \ n в Windows и \ r на Mac.

2
ответ дан 3 December 2019 в 15:35
поделиться

Блокнот Windows - это в значительной степени единственная программа Windows, которая, как вы обнаружите, не обрабатывает файлы только LF должным образом. Почти все остальное (включая WordPad) отлично обрабатывает файлы только LF.

Эта проблема - ошибка в Блокноте.

6
ответ дан 3 December 2019 в 15:35
поделиться

Вот мое решение проблемы. Это немного смесь всей информации, представленной в ответах:

  1. Я создал макрос в файле win_endl.h для новой строки, которую я хотел:

     #define win_endl "\ r \ n"
    
  2. Затем я выполнил поиск и замену:

     sheepsimulator @ Sheep \ _machine> sed -i 's / std :: endl / win_endl' *
    

И все мои файлы были включены win_endl.h .

0
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: