Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
1

Не могу записать в нетипизированный файл

06.03.2015, 17:46. Показов 1488. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер! Пытаюсь записать в нетипизированный файл, и получаю ошибку Uknown Run-Time Error:1784.

Delphi
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
Type
Zap = record
Id_zachet, id_gr: integer;
Surname, Name: string [20];
Patronymic: string[30];
end;
Type
Block = record
Zap_block: array[1..5] of zap;
End;
 
 
var
F:File of Block;
V,v1: Block;         
 
  AssignFile(F, 'file.txt') ;
  if not (FileExists('file.txt')) then
  Rewrite(F,sizeof(v))
  else
  Reset(F,sizeof(v));    
 
 
 Seek(F,FileSize(f));
  v.Zap_block[1].Id_zachet:=strtoint(Edit1.text);
  v.Zap_block[1].Surname:=Edit2.text;
  v.Zap_block[1].Name:=Edit3.text;
  v.Zap_block[1].Patronymic:=Edit4.text; ;
  v.Zap_block[1].id_gr:=strtoint(Edit5.text);
 
  blockwrite(f,v,sizeof(v));     //получаю ошибку

Если же пытаюсь записать что то другое, например переменную типа int, то записывается. Помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2015, 17:46
Ответы с готовыми решениями:

Записать значения элементов матрицы в нетипизированный файл и сохранить файл
При помощи случайных чисел ввести матрицу размером 5x7. Записать значения элементов матрицы в...

Необходимо записать массив чисел из текстового файла в нетипизированный файл
Дан текстовый файл, который содержит массив целых чисел. Необходимо записать массив чисел из...

Необходимо записать массив чисел из текстового файла в нетипизированный файл, а также минимальный и максимальный элемент
Дан текстовый файл, который содержит массив из 50 чисел. Необходимо записать массив чисел из...

Не могу записать в файл на windows, а на linux могу
Я не понимаю почему на windows не могу записать в файл данные...

8
Native x86
Эксперт Hardware
5594 / 3338 / 951
Регистрация: 13.02.2013
Сообщений: 10,587
06.03.2015, 18:02 2
Если делаете Reset(F,sizeof(v)), то записывать надо как blockwrite(f,v,1). Либо наоборот: если Reset(F,1), то blockwrite(f,v,sizeof(v)).

Добавлено через 1 минуту
Цитата Сообщение от danek130995 Посмотреть сообщение
file.txt
Вот только файл у вас не текстовый получится, лучше не давать ему расширение TXT.
1
пофигист широкого профиля
4753 / 3188 / 861
Регистрация: 15.07.2013
Сообщений: 18,450
06.03.2015, 18:24 3
И где тут нетипизированный файл?
1
quwy
06.03.2015, 18:26
  #4

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
И где тут нетипизированный файл?
А действительно. Как в анекдоте получилось: либо трусы надень, либо крестик сними :)

0
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
06.03.2015, 20:56  [ТС] 5
quwy, northener, там должно быть просто F:File, забыл стереть просто) Программа была написана ранее для типизированных файлов, а препод заставил переделывать для нетипизированных. А разве blockwrite(f,v,1) здесь 1(байт?) не указывает на размер в байтах? Я пишу blockwrite(f,v,sizeof(v)), чтобы при записи и открытии Reset(F,v) размер буфера равнялся размеру v. Или 1 здесь-это что то другое? Что это такое? Спасибо всем за ответы!
0
пофигист широкого профиля
4753 / 3188 / 861
Регистрация: 15.07.2013
Сообщений: 18,450
06.03.2015, 21:21 6
Лучший ответ Сообщение было отмечено danek130995 как решение

Решение

Цитата Сообщение от danek130995 Посмотреть сообщение
А разве blockwrite(f,v,1) здесь 1(байт?) не указывает на размер в байтах?
Нет. Это не количество байт. Это количество "записей". Размер "записи" указывается вторым параметром процедуры Reset. Если не указано, то размер "записи" 128 байт.
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
06.03.2015, 21:53  [ТС] 7
northener, получается, когда я указал Reset(F,1); файл открывается с длиной записи 1 байт? Почему тогда, когда я сейчас делаю после этого blockread(f,v,sizeof(v)); и blockwrite(f,v,sizeof(v)); данные считываются и записываются нормально? Ведь размер v=420 байт , а я указал в Reset 1 байт. Получается, я пытаюсь считать 420 записей, а разрешено только 1 байт? И если я пишу sizeof(v) в BlockWrite, получается, я говорю ему, что количество записей считываемых равно 420 байтам? Как то странно. В чем я запутался, помогите пожалуйста
0
пофигист широкого профиля
4753 / 3188 / 861
Регистрация: 15.07.2013
Сообщений: 18,450
06.03.2015, 23:23 8
Лучший ответ Сообщение было отмечено danek130995 как решение

Решение

Цитата Сообщение от danek130995 Посмотреть сообщение
Получается, я пытаюсь считать 420 записей, а разрешено только 1 байт?
Ты пытаешься считать 420 записей размером в 1 байт. А 420 байт это и есть размер той структуры, которую ты считываешь. Так что все правильно.
1
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
07.03.2015, 10:35  [ТС] 9
northener, я кажется понял!) Т.е. я при blockread(f,v,sizeof(v)) считываю 420 раз по 1 байту(т.к. Reset(F,1) ), что и равняется размеру v. С таким же успехом я могу открыть файл Reset(F,420), и уже спокойно считывать blockread(f,v,1). Спасибо огромное!
0
07.03.2015, 10:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2015, 10:35
Помогаю со студенческими работами здесь

Нетипизированный файл
Всем добрый вечер. Есть вопрос,подскажите пжл. Имеется не типизированный файл Assign(f,st). Он...

Нетипизированный файл
Подскажите, пожалуйста, как записать массив типа char в нетипизированный файл?

Нетипизированный файл
Ребята, подскажите, вот условие было, работа с Типизированным и нетипизированным файлами,...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru