Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись в файл 
:(
    Опции темы
skrip
Дата 10.8.2006, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



можно в текстовый файл записать строку с помощью 
write(), так чтобы потом было понятно, что написано 
просмотрев ,например, в vi.

записываю так
Код

std::string st="Writing...";
file.write((char*)&st, st.size());


в итоге в файле написано:
^T| ^D^H^@^@^@^@^@^@

чтобы записывалось понятно делаю так
Код

void write_stline(std::fstream &file, std::string st)
    {
    int sz=st.size();
    int i=0;
    for(i; i<sz; ++i) file.write((char*)&st[i], 1);
    };


как нибудь подругому можно записать строку (не посимвольно)
через write();
PM MAIL   Вверх
Earnest
Дата 10.8.2006, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



вместо &st пиши st.c_str(): ты берешь адрес объекта, а тебе нужен адрес строки - это не одно и то же.


--------------------
...
PM   Вверх
skrip
Дата 10.8.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



а почему тогда если потом эту абра кадабру прчитать с помощью read((char*)&st, 512) на консоли то что надо.
Эта защифрованность случайно никак не связана с тем что  write() и read() работают с бинарными файлами

Добавлено @ 09:01 
Кстати, чем бинарный файл отличается от текстового?
PM MAIL   Вверх
Sunr1se
Дата 10.8.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 1
Всего: 13



Цитата(skrip @  10.8.2006,  09:52 Найти цитируемый пост)
Кстати, чем бинарный файл отличается от текстового? 

http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%...%B0%D0%B9%D0%BB
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
MAKCim
Дата 10.8.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

можно в текстовый файл записать строку с помощью 
write(), так чтобы потом было понятно, что написано 
просмотрев ,например, в vi.

Код

std::string st="Test";
file<<st;


Добавлено @ 09:14 
Цитата

а почему тогда если потом эту абра кадабру прчитать с помощью read((char*)&st, 512) на консоли то что надо.
Эта защифрованность случайно никак не связана с тем что  write() и read() работают с бинарными файлами

ты вообще неправильно читаешь и записываешь
читай пост Earnest


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 10.8.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Это не зашифрованность, просто буфер строки вовсе не обязан совпадать с началом объекта.
То, что при чтении (симметричном, заметь!) у тебя получилось "то, что надо" - чистая случайность. Скорее всего, ты имеешь дело с такой реализацией string, где небольшой буфер для коротких строк включен в тело объекта string. А если бы буфер всегда выделялся динамически, или строка была длинная - никакого "то, что надо" не вышло бы.

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

И вообще, прежде чем что-то писать, подумай о том, как ты (или кто-то другой) будешь это читать: т.е. при записи ты должен предоставить достаточно информации для последующего чтения и восстановления объекта.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.