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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AnsiString в бинарный файл, чтение и запись 
:(
    Опции темы
Gleb
Дата 11.7.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Уважаемые, облазил почти все - нигде не нашел, как AnsiString сохранять и читать из бинарного файла с помощью ifstream и ofstream. Возможно ли такое в принципе?
Пробовал приводить к массиву символов, но появляется мусор на месте последнего символа в читаемой строке, да и сохраняется не в бинарном виде.
PM MAIL   Вверх
Дрон
Дата 11.7.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Gleb
Этот вопрос нужно в раздел по C++ Builder писать.

Но насколько я помню такой возможности там нет.

Цитата(Gleb @ 11.7.2005, 16:46)
да и сохраняется не в бинарном виде

А в каком ещё виде оно может сохраняться?


--------------------
Да. Именно так.
PM   Вверх
Gleb
Дата 11.7.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тогда хоть подскажите какой-нибудь метод не низкоуровневый попроще. Буду очень признателен.
Дрон, если приводить к массиву символов, то сохраняется в обычном текстовом виде, по крайней мере так происходит у меня smile
PM MAIL   Вверх
Earnest
Дата 11.7.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А что такое AnsiString? Это не массив байтов по сути? Для анси-символов что "обычный текстовый" вид, что бинарный - разве что символ конца строки будет другой... А вы, случайно, не в текстовом режиме ifdtream и ofstream открываете?


--------------------
...
PM   Вверх
Gleb
Дата 11.7.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нет, открываю с ios::binary
PM MAIL   Вверх
vadims
Дата 11.7.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



метод c_str() формирует из AnsiString массив типа char

те
copy(buf, Str.c_str() );

получил из AnsiString Str -> char buf[]
единственное что надо подумать о размере буфера - например

buf = new(Str.Length)


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Дрон
Дата 11.7.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



vadims
А strcpy уже отменили? smile smile


--------------------
Да. Именно так.
PM   Вверх
ДмитрийПП
Дата 11.7.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

ofstream ofs;
ofs.open("test.dat", ios_base::out | ios_base::binary );
ofs << Caption.c_str() << '\0';
ofs.close();  

Где Caption - AnsiString заголовок окна. Просто используй функцию c_str(). Прочитать тоже не очень сложно.
PM MAIL   Вверх
Gleb
Дата 11.7.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

    AnsiString str = "Hello World";
    char *string = new char[str.Length()];
    strcpy(string, str.c_str());

    ofstream file("data.db",ios::binary);
    file.write(string,sizeof(char)*str.Length());
    file.close();

    delete[] string;


В итоге 11 байт и строчка "Hello World"
PM MAIL   Вверх
vadims
Дата 11.7.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дрон
Ну перегрелся я smile у себя никак ошибку в простейших вычислениях найти не могу - кто бы подсказал а то глаз замылился - а в форум выкладывать не хочу - засмеете smile


Gleb
Если тебе надо просто записать- можно еще проще, без буферов и копирований

AnsiString str = "Hello World";

ofstream file("data.db",ios::binary);
file.write(str.c_str(),sizeof(char)*str.Length());
file.close();




--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Vyacheslav
Дата 11.7.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А чем не устроили операторы AnsiString << и >> ?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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