![]() |
|
|
![]()
|
|
| FallenAngel |
|
|||
|
Unregistered |
Доброго времени суток!
Есть строковый массив:
длина строк варьируется. Как его можно записать в бинарный файл? |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| FallenAngel |
|
|||
|
Unregistered |
таким способом записываюся не все символы из каждой строки, а лишь часть их.
например: если строка была длиной 7 символов, записались только 4. Из 17-ти записались 9. Это сообщение отредактировал(а) FallenAngel - 23.7.2009, 17:41 |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Вообще изначально неправильно записывать строки в бинарный файл, вы их потом от туда никаким образом считать не сможете.
На самом деле строке у вас полностью записывабтся, а вот некоторые символы не отображаются. Думаю вам больше подойдет запись в текстовом режиме ("wt" вместо "wb"). Если всетаки по какой-то причине вам нужно именно бинарный режим, то вам придется еще перед каждой стройко записывать ее размер, иначе у вас не получится потом их считать. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| FallenAngel |
|
|||
|
Unregistered |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Если вы собираетесь в файл писать информацию, которую затем будете редактировать через текстовый редактор, то следует писать в текстовом режиме.
Если какие-то служебные данные (структуры например), то лучше в бинарном режиме. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| shklowsky |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.7.2009 Репутация: 5 Всего: 6 |
запишет как текст конечно. а писать строки как данные- смысл... потом их не разлепишь. |
|||
|
||||
| FallenAngel |
|
||||
|
Unregistered |
Вообще в массив пишутся пути к некоторым файлам, и я затем всё это записываю в бинарник наряду с другими данными.
Запись в файл произвожу таким образом
но при считывании
у меня в массив попадают непонятные иероглифы... B при этом в массиве как-то криво выделяется память ![]() это то, что получается после первого прохода по циклу. |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Нельзя в тип String вот так просто считать данные из файла.
Нужно примерно так: for( int k=0; k<64; k++ ) { int len=0; fread( &len, sizeof(int), 1, stream ); char* Path = new char[ len + 1 ]; fread( Path , len, 1, stream ); Path[len] = '\0'; String S = (AnsiString)Path; /// Аот на этом месте мы получим строку типа AnsiString delete [] Path; } Это сообщение отредактировал(а) Artemon - 23.7.2009, 20:03 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| shklowsky |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.7.2009 Репутация: 5 Всего: 6 |
||||
|
||||
| FallenAngel |
|
|||
|
Unregistered |
При такой записи:
он после каждого символа вставляет "\0" Artemon, может тогда проще всё перегнать в char'овский массив и его уже записывать и считывать? ругается на невозможность преобразовать "*void" в "const* void" |
|||
|
||||
| shklowsky |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.7.2009 Репутация: 5 Всего: 6 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Если вы в дальнейшем постоянно работате с массивом строк, то лучше всего его так и оставить типа String.
А если к примеру вы используете это массив единожды, чтобы загрущить из него данные в дерево, то на мой взгляд лучше ввобще убрать, а дерево формировать прямо в цикле, в котором происходит загрузка из файла. И еще, я думаю стоит в начале файла записать число int, которое будет содерджать общее число пар (размер/строка) в файле. Первым делом считывать его и организовывать цикл от 0 до этого числа, а не задавать его константой. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| FallenAngel |
|
|||
|
Unregistered |
Спасибо за помощь, вопрос решён!
|
|||
|
||||
| shklowsky |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.7.2009 Репутация: 5 Всего: 6 |
||||
|
||||
| FallenAngel |
|
|||
|
Unregistered |
Длину строки возвращает нормальную, а вот в файл её (строку) записывает вот так: "С\0т\0р\0о\0к\0а\0"
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Bulder 2009? У него все строки внутри (и снаружи
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |