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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Werewolf_RU
7 / 7 / 3
Регистрация: 03.02.2014
Сообщений: 195
Завершенные тесты: 1
#1

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

18.04.2014, 20:35. Просмотров 611. Ответов 26
Метки нет (Все метки)

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

Драйвер виртуального монитора | Скринкаст из (бэк|график|фрейм)буфера - C++
Собственно, пишу я... Свой велосипед - быстрый VNC-подобный (концептуально) сервер/клиент, который... позволит нормально гамать в...

Используя рекурсивный бэк трэкинг сгенерировать все перестановки заданного числа - C++
Используя рекурсивный бэк трэкинг сгенерировать все перестановки заданного числа n.

Сортировка дублирует последний элемент - C++
// одномерный массивы.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include...

Слеш и hInternet - C++
Вообщем есть такой код int main(int argc, char* argv) { setlocale(LC_CTYPE, ""); //русский текст strcpy(url,"ya.ru"); ...

Ofstream - C++
#include <iostream> #include <fstream> using namespace std; int main() { ofstream test("C:\Program Files...

ofstream - C++
доброго времени суток! Возникла такая проблема: У меня программа должна помещать данные о процессах и модулях в txt файл std::ofstream...

ofstream - C++
Привет всем! Народ помогите пожалуйста нубу) Как сделать так чтобы создовался файл с именем которое я наберу с клавиатуры... пытался...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5251 / 4571 / 1535
Регистрация: 14.04.2014
Сообщений: 18,171
18.04.2014, 20:39     Ofstream дублирует бэк-слеш #2
Где они задублировались? И текст программы представь.
Werewolf_RU
7 / 7 / 3
Регистрация: 03.02.2014
Сообщений: 195
Завершенные тесты: 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:44     Ofstream дублирует бэк-слеш #4
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
что при чтении из файла путём использования потока ofstream
ofstream - это для записи, а не для чтения.
Werewolf_RU
7 / 7 / 3
Регистрация: 03.02.2014
Сообщений: 195
Завершенные тесты: 1
18.04.2014, 20:46  [ТС]     Ofstream дублирует бэк-слеш #5
Цитата Сообщение от alsav22 Посмотреть сообщение
ofstream - это для записи, а не для чтения
Задумался при написании темы, каюсь. В коде такого косяка нет.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:47     Ofstream дублирует бэк-слеш #6
Записываете в файл откуда и как?
Werewolf_RU
7 / 7 / 3
Регистрация: 03.02.2014
Сообщений: 195
Завершенные тесты: 1
18.04.2014, 20:51  [ТС]     Ofstream дублирует бэк-слеш #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Записываете в файл откуда и как?
Цель в том, чтобы можно было открывать текстовый файл, в который что-то записано из другого текстового редактора. А при такой записи у нас символы \ и n действительно запишутся как 2 разных. Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
nmcf
5251 / 4571 / 1535
Регистрация: 14.04.2014
Сообщений: 18,171
18.04.2014, 20:56     Ofstream дублирует бэк-слеш #8
Если тебе надо читать всё как есть включая спецсимволы, открывай файл как бинарный.
Werewolf_RU
7 / 7 / 3
Регистрация: 03.02.2014
Сообщений: 195
Завершенные тесты: 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:00     Ofstream дублирует бэк-слеш #10
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
у нас символы \ и n действительно запишутся как 2 разных
Они и есть разные.
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
Не нужно его обозначать, он и так там есть (при нажатии Enter ставится), только не имеет графического отображения.
nmcf
5251 / 4571 / 1535
Регистрация: 14.04.2014
Сообщений: 18,171
18.04.2014, 21:01     Ofstream дублирует бэк-слеш #11
Они не разные, \n - один символ (байт). Он, наверное, в отладчике смотрит.
Автор, ты как смотришь, что прочитано? Через отладчик?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:03     Ofstream дублирует бэк-слеш #12
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
В таком случае та же история. В один символ записывается \\ в другой n.
В какой один символ? Файл покажите.

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

ofstream - C++
Линковка, компиляция без ошибок. При выполнении программы срабатывает условие, почему так? Если лепить файл с программой в директории, то...

Заменить обратный слеш на обычный - C++
К примеру, у нас есть ссылка:...

Удвоенный двойной слеш в wstring - C++
Здравствуйте. Делаю так: std::wstring s = argv ; s += L" "; s += argv; Получаю слишком много слешей, как с этим...

std::string и двойной слеш - C++
Вопрос достаточно прост в примитивной программе: #include <iostream> #include <string> using namespace std; int main() { ...

FILE* и ofstream - C++
Здравствуйте. Была поставлена предо мной задача: Сделать структуру, которая через меню будет выполнять некоторые действия с файлами....


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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 дублирует бэк-слеш
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru