![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер. Столкнулся с проблемой чтения/записи в файл. Задача в следующем: есть структура, ее необходимо записать в файл, а затем считать, причем запись может осуществляться несколько раз.
Записть организована следующим образом: struct str Чтение: struct str При записи вроде все нормально, но когда читаю данные из файла появляется ошибка. Сообщение отредактировано: ninja - 18.09.2010 20:34 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата При записи вроде все нормально, но когда читаю данные из файла появляется ошибка. Вот при записи и ошибка. Что такое AnsiString? Это указатель. Попробуй запустить вот такой код:void __fastcall TForm1::Button1Click(TObject *Sender) , а в Edit2 запихай строку подлиннее, символов из 20-30. И что ты получишь в качестве размера struct var? 8 байт? А как целое число и строка длинной 20 символов затолкались в 8 байт? Очень просто: 4 байта - sizeof(int) и 4 байта размер указателя, который из себя и представляет тип AnsiString. Но при записи - ничего особо страшного, ну, записал ты значение указателя в файл - фиг бы с ним. А вот при чтении - облом. Ты прочел значение указателя, но... ![]() |
ninja |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
тоесть если я правильно понял нужно указать количество байт?
struct str Или объявлять конкретный тип? вот так наверное будет правильней struct str Сообщение отредактировано: ninja - 18.09.2010 21:28 |
ninja |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
так тоже не верно...
я помню когда в delphi объявляется запись нужно указывать количество байт т.е. zapis = record Сообщение отредактировано: ninja - 18.09.2010 21:47 |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата вот так наверное будет правильней Вот так действительно будет правильней. А еще лучше -struct strТолько заполнять такой массив надо будет по-другому, простое присваивание уже не пройдет. |
ninja |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Владимир, а заполнять массив просто обычным циклом? например:
struct str |
ninja |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Сделал, вроде все работает, но как то, если чесно криво я это реализрвал...
запись в файл: struct str чтение: struct str Появился 1 Warning: Comparing signed and unsigned values Сообщение отредактировано: ninja - 18.09.2010 22:46 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
// запись |
ninja |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Владимир, спасибо Вам большое все работает.
|
![]() ![]() |
![]() |
Текстовая версия | 11.08.2025 0:40 |