Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30

Чтение/запись файа

24.04.2011, 18:31. Показов 2423. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! пробема следующая: сохраняю массив структур в файл, загружаю - загружается непонятно что.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
struct TagDirection{
char category;
int lastuses;
bool isfixed;
char name[27];
};
 
void ReadTag(String tagfname, TagDirection* SourceTag ){
int fh=FileOpen(tagfname,fmOpenRead);
FileSeek(fh,0,0);
char count;
FileRead(fh,&count,sizeof(char));
SourceTag=new TagDirection[count];
for(char i=0;i<count;i++){
FileRead(fh,&SourceTag[i].category,sizeof(char));
FileRead(fh,&SourceTag[i].lastuses,sizeof(int));
FileRead(fh,&SourceTag[i].isfixed,sizeof(bool));
FileRead(fh,&SourceTag[i].name,sizeof(char)*27);
}
FileClose(fh);
}
 
void WriteTag(String tagfname, TagDirection* SourceTag, char count){
int fh=FileCreate(tagfname);
if ( fh == -1) ShowMessage("файл не существует");
 
FileSeek(fh,0,0);
FileWrite(fh,&count,sizeof(char));
for(char i=0;i<count;i++){
FileWrite(fh,&SourceTag[i].category,sizeof(char));
FileWrite(fh,&SourceTag[i].lastuses,sizeof(int));
FileWrite(fh,&SourceTag[i].isfixed,sizeof(bool));
FileWrite(fh,&SourceTag[i].name,sizeof(char)*27);
}
FileClose(fh);
}
 
void PrintTag(TagDirection* SourceTag, char count, TMemo* memo){
memo->Clear();
for(char i=0;i<count;i++){
String l=(AnsiString)SourceTag[i].category+"|"+SourceTag[i].name+"; uses="+IntToStr(SourceTag[i].lastuses);
memo->Lines->Add(l);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int count=2;
TagDirection* TD=new TagDirection[count];
TD[0].category='f';
TD[0].lastuses=20;
TD[0].isfixed=false;
StrCopy(TD[0].name,"первый");
TD[1].category='q';
TD[1].lastuses=100500;
TD[1].isfixed=true;
StrCopy(TD[1].name,"Второй");
WriteTag("C:\\TAG",TD,count);
TagDirection* TD2;
ReadTag("C:\\TAG",TD);
PrintTag(TD2,count,Memo1);
}
Казалось бы, в Memo1 должны появиться данные, введенные ручками в событии Button2Click, но результат седующий:

Code
1
2
t|яоя; uses=16806714
?|; uses=2621440
Причем первый символ и цифры всегда разные. Пробова разными способами - результат один и тот же. Подскажите пожауйста, что я деаю не так?
P.s. с чтением/записью файлов работаю впервые
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2011, 18:31
Ответы с готовыми решениями:

Чтение\запись файла
Как в 6 Билдере читать построчно файл, содержащий текст (наверно в лучше в string или char*?), и потом записывать строки в другой файл...

Чтение/Запись в файл
Доброго всем времени суток. При написании курсовика пытаюсь вспомнить навыки С++, но дело идет туго. Необходима программа тестирования...

Запись и чтение с файла
Здраствуйте! Есть такая структура: struct Elem {AnsiString Name; int poinyX; int pointY; }; Elem masElem;

6
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
24.04.2011, 18:46
Используй ifstream для чтения из файла и ofstream для записи в файл.
0
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
24.04.2011, 19:07  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void ReadTag(String tagfname, TagDirection* SourceTag ){
std::ifstream in;
in.open(tagfname.c_str());
char count=0;
in>>count;
SourceTag=new TagDirection[count];
for(char i=0;i<count;i++){
in>>SourceTag[i].category>>SourceTag[i].lastuses>>SourceTag[i].isfixed>>SourceTag[i].name;
}
in.close(); 
}
 
void WriteTag(String tagfname, TagDirection* SourceTag, char count){
std::ofstream out;
out.open(tagfname.c_str());
out<<count;
for(char i=0;i<count;i++)
out<<SourceTag[i].category<<SourceTag[i].lastuses<<SourceTag[i].isfixed<<SourceTag[i].name;
out.close();
}
Так тоже пробовал. Файл делается другого вида (если открыть блокнотом), но результат примерно тот же. Сдается мне, что пишется и читается все нормально, а проблема в выводе данных.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
24.04.2011, 19:12
C++ Чтение из файла, запись в файл
а почему char, а не int?
0
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
24.04.2011, 19:27  [ТС]
Кстати, файлов будет много, по этому интересно, какой из этих методов будет работать быстрее?

Добавлено через 14 минут
Потому что читаю и пишу символы: потоковый ввод-вывод с ними вроде обычно нормально справляется. А у переменной count, потому что она не планируется больше 255, а char занимает в два раза меньше intа. И не понял, к чему видюшка: оформлено то у меня вроде все по фэн-шую
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
24.04.2011, 19:54
Трудно выявить проблемное место на глаз, т.к. код неотформатированно вставлен.
0
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
24.04.2011, 20:25  [ТС]
Что я нашел:
C++
1
2
3
4
WriteTag("C:\\TAG",TD,count);
TagDirection* TD2;
ReadTag("C:\\TAG",TD);
PrintTag(TD2,count,Memo1);
я случайно считывал в одну структурку, а печатал другую, пустую. Но когда исправил, результат остался тем же, то есть функция ReadTag не изменяла массив SourceTag. Попробовал передавать массив по ссылке, попробовал сделать массив не параметром а возвращаемым значением: и в том и в другом случаях печатается только первый элемент массива, и там где должно печататься name пусто.

Добавлено через 11 минут
Проблема решена: при считывании потоком читалось 27 символов в массив name, а там символов было меньше. Сделал первым способом с возвращением функцией массива - все работает. Конечно через потоки памяти затрачивается больше, но по задумке на каждый элемент должно выделяться одинаковое количество памяти, так что этот способ в самый раз.
Тему можно закрыть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2011, 20:25
Помогаю со студенческими работами здесь

Запись и чтение из файла
В общем, есть код, с помощью которого мы сохраняем полный путь к треку в файл и потом считываем этот путь из файла соответсвенно.. Способы...

Бинарное чтение\ запись
Всем добрый вечер, ребята кто умеет и сталкивался с бинарным чтением и записью помогите отладить бинарную запись этой программы я там начал...

Чтение/запись из файла
Здравствуйте! Такой вот вопрос: есть файл,который мы читаем, он представляет из себя массив одномерный в виде 10101010100010101010.......

Чтение и запись в com порт
Порт открывается для асинхронного режима, затем мне надо чтобы по нажатию Enter содержимое Edit отправилось как команда в порт. Команда...

Запись и чтение файла
Здравствуйте. Странно ведет себя тестовая программа, которая записывает данные в файл и из него же считывает. Записывается в файл...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru