Форум программистов, компьютерный форум CyberForum.ru

Ofstream дублирует бэк-слеш - C++

Восстановить пароль Регистрация
 
 
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 20:35     Ofstream дублирует бэк-слеш #1
Здравствуйте, столкнулся с проблемой, что при чтении из файла путём использования потока ofstream у меня дублируются все находящиеся в файле бэк-слэши.
Для того чтобы не изобретать с вашей помощью новое колесо сразу скажу, что мне необходимо чтобы из файла скопировался символ переноса строки \n. Как это можно сделать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 20:35     Ofstream дублирует бэк-слеш
Посмотрите здесь:

ofstream C++
C++ std::string и двойной слеш
ofstream C++
Слеш и hInternet C++
Используя рекурсивный бэк трэкинг сгенерировать все перестановки заданного числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 20:39     Ofstream дублирует бэк-слеш #2
Где они задублировались? И текст программы представь.
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 20:43  [ТС]     Ofstream дублирует бэк-слеш #3
C++
1
2
3
4
5
6
7
8
ifstream input;
input.open("c:\\input.txt");
char buf[100];
while(!input.eof())
        {
            input>>buf;
            strcat(test, buf);strcat(test, " ");
        }
Если в файле попадается символ '\', то он копируется в буфер как "\\"
Собственно, изначально подозревал, что при попытке считать из файла '\n' он считает его просто как 2 отдельных символа слеша и буквы, но так как не нашёл иного варианта решил попробовать.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:44     Ofstream дублирует бэк-слеш #4
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
что при чтении из файла путём использования потока ofstream
ofstream - это для записи, а не для чтения.
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 20:46  [ТС]     Ofstream дублирует бэк-слеш #5
Цитата Сообщение от alsav22 Посмотреть сообщение
ofstream - это для записи, а не для чтения
Задумался при написании темы, каюсь. В коде такого косяка нет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:47     Ofstream дублирует бэк-слеш #6
Записываете в файл откуда и как?
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 20:51  [ТС]     Ofstream дублирует бэк-слеш #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Записываете в файл откуда и как?
Цель в том, чтобы можно было открывать текстовый файл, в который что-то записано из другого текстового редактора. А при такой записи у нас символы \ и n действительно запишутся как 2 разных. Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 20:56     Ofstream дублирует бэк-слеш #8
Если тебе надо читать всё как есть включая спецсимволы, открывай файл как бинарный.
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 20:59  [ТС]     Ofstream дублирует бэк-слеш #9
Цитата Сообщение от nmcf Посмотреть сообщение
открывай файл как двоичный
C++
1
2
3
4
5
6
7
8
ifstream input;
        input.open("c:\\input.txt", ios::binary);
        char buf[100];
        while(!input.eof())
        {
            input>>buf;
            strcat(SendR, buf);strcat(SendR, " ");
        }
В таком случае та же история. В один символ записывается \\ в другой n.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:00     Ofstream дублирует бэк-слеш #10
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
у нас символы \ и n действительно запишутся как 2 разных
Они и есть разные.
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
Не нужно его обозначать, он и так там есть (при нажатии Enter ставится), только не имеет графического отображения.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 21:01     Ofstream дублирует бэк-слеш #11
Они не разные, \n - один символ (байт). Он, наверное, в отладчике смотрит.
Автор, ты как смотришь, что прочитано? Через отладчик?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:03     Ofstream дублирует бэк-слеш #12
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
В таком случае та же история. В один символ записывается \\ в другой n.
В какой один символ? Файл покажите.

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Они не разные
'\n' - код 10. '\' - код 47.
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 21:03  [ТС]     Ofstream дублирует бэк-слеш #13
Цитата Сообщение от alsav22 Посмотреть сообщение
принажатии Enter ставится
Пробовал. Если он там и ставится при нажатии enter, то поток его игнорирует(а верней останавливается на нём) как и на любом другом разделителе строк - пробелы, табуляции и т.п. Потому я и загружаю всё в цикле. Если есть способ "вытащить" файл целиком так, чтобы поток считал разделители чем-то обычным, прошу мне о нём рассказать)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:04     Ofstream дублирует бэк-слеш #14
Цитата Сообщение от nmcf Посмотреть сообщение
Он, наверное, в отладчике смотрит.
Сейчас разберёмся.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 21:04     Ofstream дублирует бэк-слеш #15
В текстовом файле "новая строка" - один символ, это представление строки в C++ нотации будет с двумя.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:05     Ofstream дублирует бэк-слеш #16
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
то поток его игнорирует(а верней останавливается на нём) как и на любом другом разделителе строк - пробелы, табуляции и т.п.
Написали уже:
Цитата Сообщение от nmcf Посмотреть сообщение
Если тебе надо читать всё как есть включая спецсимволы, открывай файл как бинарный.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 21:07     Ofstream дублирует бэк-слеш #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В режиме binary должен всё читать. Только надо read() использовать для этого.
Werewolf_RU
 Аватар для Werewolf_RU
5 / 5 / 3
Регистрация: 03.02.2014
Сообщений: 187
Завершенные тесты: 1
18.04.2014, 21:08  [ТС]     Ofstream дублирует бэк-слеш #18
Цитата Сообщение от nmcf Посмотреть сообщение
Автор, ты как смотришь, что прочитано? Через отладчик?
Да, просматриваю через отладчик. Т.к. записываю в массив, то там это хорошо видно, в одной ячейке лежат слеши, в другой буква.
Цитата Сообщение от alsav22 Посмотреть сообщение
В какой один символ? Файл покажите.
Прилагаю скриншот содержимого файла и того, что мне пишет отладчик, для полной ясности.
Миниатюры
Ofstream дублирует бэк-слеш  
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
18.04.2014, 21:10     Ofstream дублирует бэк-слеш #19
Отладчик будет переводить в такое представление, потому что другого способа представить спецсимволы нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 21:11     Ofstream дублирует бэк-слеш
Еще ссылки по теме:

сортировка дублирует последний элемент C++
Драйвер виртуального монитора | Скринкаст из (бэк|график|фрейм)буфера C++
Удвоенный двойной слеш в wstring C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:11     Ofstream дублирует бэк-слеш #20
Цитата Сообщение от nmcf Посмотреть сообщение
В режиме binary должен всё читать. Только надо read() использовать для этого.
Можно еще посимвольное чтение использовать, или fgets(), она считывает '\n' из файла. Т.е., вариантов масса.
Yandex
Объявления
18.04.2014, 21:11     Ofstream дублирует бэк-слеш
Ответ Создать тему
Опции темы

Текущее время: 06:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru