Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.84
Zarechnev
16 / 16 / 15
Регистрация: 25.09.2011
Сообщений: 104
#1

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error). - Turbo Pascal

12.11.2011, 19:10. Просмотров 4840. Ответов 10

Здравствуйте, возникла проблема такого плана.
Нужно произвести добавление записи в файл, но после успешного создания и чтения вылазиет ошибка:
Ошибка 101: Ошибка записи на диск.

Я понял, что ошибка кроется в процедуре add; в строке №93
Pascal
1
Write(F, baza);
Узнал, что эта ошибка появляется из-за "переполенния" файла. Своими силами больше не могу ничего сделать, поэтому пишу сюда. Надеюсь на вашу помощь.

ИСХОДНИК:

Pascal
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Program STUDENT;
Uses CRT;
Type
rec=record
fio:string[30];
bal:array [1..4] of byte;
end;
Var
kol : Byte; { Число студентов }
n:Integer;
baza:rec;
F:file of rec;
 
{ ВВОД ФИО СТУДЕНТОВ }
Procedure Vvod;
var
j,i : Byte; { Счетчик для массива ФИО}
Begin
Write(' Введите желаемое кол-во студентов:');
ReadLn(kol);
WriteLn(' Введите инициалы студентов:');
WriteLn;
REWRITE(F); { Открываем файл для записи}
   { Запись ФИО студентов}
   For i:= 1 to kol do
      Begin
      Write(' ФИО ',i,' студента: ');
      ReadLn(baza.fio);
      TextColor(Green);
      WriteLn(' Введите его 4 оценки:');
      TextColor(White);
   { Запись оценок по предметам}
         For j:= 1 to 4 do
            Begin
            Write(' Оценка за ',j,' предмет-');
            ReadLn(baza.bal[j]);
            End;
      WriteLn;
      Write(F,baza);
      End;
CLOSE(F);
WriteLn;
WriteLn(' Запись успешно завершена. Нажмите Enter');
ReadLn;
End;
 
{ ВЫВОД ИНФОРМАЦИИ О СТУДЕНТАХ}
Procedure Vyvod;
Var
j,n: Byte;
Begin
n:=0;
RESET(F);
WriteLn('СПИСОК СТУДЕНТОВ:');
While not eof(F) do      { Пока не конец файла, производим чтение}
   With baza do
      Begin
      n:=n+1;            { Нумерация студентов}
      Read(F, baza);     { Читам запись из файла}
      Write(n,' ',baza.fio);   { и выводим построчно на экран}
         For j := 1 to 4 do
            Write(' ',baza.bal[j]);
      WriteLn;
      End;
CLOSE(F);
WriteLn(' Чтение успешно завершено. Нажмите Enter.');
ReadLn;
End;
 
{ ДОБАВЛЕНИЕ СТУДЕНТА }
Procedure add;
var
i,j,num:Byte;
Begin
RESET(F); { Открываем файл для добавления}
SEEK(F, FileSize(F));
Write(' Введите кол-во добавляемых:');
ReadLn(num);
   { Добавляем студентов}
   For i:= 1 to num do
      Begin
      Write(' ФИО ',i,' студента: ');
      ReadLn(baza.fio);
      TextColor(Green);
      WriteLn(' Введите его 4 оценки:');
      TextColor(White);
   { Запись оценок по предметам}
         For j:= 1 to 4 do
            Begin
            Write(' Оценка за ',j,' предмет-');
            ReadLn(baza.bal[j]);
            End;
         Write(F, baza);
      End;
CLOSE(F);
WriteLn;
WriteLn(' Добавление успешно завершено. Нажмите Enter');
ReadLn;
End;
 
{ ГЛАВНАЯ ПРОГРАММА }
BEGIN
CLRSCR;
TextColor(Yellow);
WriteLn(' Программу разработал студент гр. 11ИЭ1Б Заречнев Андрей.');
WriteLn(' Запись и чтение инф-ии о студентах из файла.');
TextColor(White);
WriteLn;
ASSIGN(F,'STUD');
vvod;
vyvod;
add;
vyvod;
WriteLn;
WriteLn(' Нажмите Enter для выхода.');
ReadLn;
END.
Добавлено через 1 час 9 минут
Код-то не такой страшный
С комментариями тем более...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2011, 19:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error). (Turbo Pascal):

Ошибка Error 100: Disk read error
Program pr2122; Uses Dos, crt; Type stip = record pr: string; ...

Ошибка Error 100: Disk read error
Что это за ошибка? program test; uses crt; const n = 100; var a:...

ошибка 100: Disk read error
Привет всем! Нужно считать данные из файла записей, при запуске программы...

Ошибка 100 Disk Read Error
Помогите пожалуйста исправить ошибку, что бы я не делал и не читал на форуме -...

Ошибка: const Error 113: Error in statement
const nmax=100; var a: array of real; i,j,d,n,m: integer; begin...

Вращение отрезка и ошибка "Error 113. Error in statement"
Здравствуйте, встретил старый студенческий листинг реализации задачи: ...

10
Puporev
Модератор
54148 / 41781 / 28887
Регистрация: 18.05.2008
Сообщений: 98,329
12.11.2011, 21:54 #2
У меня в Турбо Паскале все работает, в том числе и записывает без ошибок.
0
SuPeR XaKer
2844 / 1973 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
12.11.2011, 21:57 #3
Zarechnev, проверяли не в School Pak случайно?
0
Zarechnev
16 / 16 / 15
Регистрация: 25.09.2011
Сообщений: 104
12.11.2011, 22:57  [ТС] #4
да. через скул пак. через турбо все отлично? надо будет скачать, проверить. спасибо за информацию
0
SuPeR XaKer
2844 / 1973 / 788
Регистрация: 23.09.2010
Сообщений: 4,877
12.11.2011, 23:44 #5
Zarechnev, тогда понятно.Это такой косяк. Смело эмулируйте в DosBox другой TP (можно скачать здесь на форуме).
0
Zarechnev
16 / 16 / 15
Регистрация: 25.09.2011
Сообщений: 104
13.11.2011, 20:35  [ТС] #6
Да, в Турбо все отлично работает.
И вот по ходу доработки программы возникло еще несколько вопросов:

1) Как удалить часть записи из файла не используя truncate? (в моем случае - запись о студенте)
2) Как рациональней организовать проверку на корректность данных? Т.е. если файл не создан, вывод сообщения об ошибке. Знаю что используется IOResult, но как именно, не представляю.

Если кому-то будет интересно и появится желание помочь, вот исходник с исполняемым файлом:
Скачать pas + exe

Там у меня есть мелкие ошибки, которые никак не могу определить, а именно:
-При выборе пункта меню №3 и вводе данных(когда файл еще не создан, т.е. при 1м запуске программы) вылетает из программы, компилятор пишет, что файл не открыт, хотя все проверял.
-Каким то образом(а каким не знаю) при создании файла и вводе информации, в этой же процедуре происходит ее вывод, которого быть не должно.
- <...>
Заранее благодарю за помощь.
0
Puporev
Модератор
54148 / 41781 / 28887
Регистрация: 18.05.2008
Сообщений: 98,329
13.11.2011, 21:33 #7
Цитата Сообщение от Zarechnev Посмотреть сообщение
Как удалить часть записи
Никак, только запись целиком, если последняя то
Pascal
1
2
seek(f,fileseze(f)-2);
truncate(f);
если не последняя, сдвиг всех элементов начиная с i+1 на 1 вверх, потом тоже самое.

Добавлено через 2 минуты
Цитата Сообщение от Zarechnev Посмотреть сообщение
Т.е. если файл не создан, вывод сообщения об ошибке. Знаю что используется IOResult,
Pascal
1
2
3
4
5
6
{$I-}reset(f);{$I+}
if IOResult<>0 then
 begin
  write('Файл еще не создан');
  rewrite(f);
 end;
или другой вариант, например выход из процедуры или программы.
0
Zarechnev
16 / 16 / 15
Регистрация: 25.09.2011
Сообщений: 104
13.11.2011, 21:44  [ТС] #8
Так, с этим понял, спасибо, а насчет мелких непонятных ошибок можете подсказать?

Добавлено через 7 минут
А вообще, чтобы я вас не доставал вопросами, где можно прочитать про файлы?
Где все на конкретных примерах разибрается, а не просто статья с названиями и назначениями процедур.
0
Puporev
Модератор
54148 / 41781 / 28887
Регистрация: 18.05.2008
Сообщений: 98,329
14.11.2011, 07:43 #9
Конкретно что читать я не знаю, основы описаны практически везде, а навыки приобретал методом проб и ошибок.
Можно вот это посмотреть.
http://vtit.kuzstu.ru/books/shelf/128/sod/sd.html
1
Mawrat
12821 / 5729 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
27.05.2013, 10:38 #10
Цитата Сообщение от Zarechnev Посмотреть сообщение
Здравствуйте, возникла проблема такого плана.
Нужно произвести добавление записи в файл, но после успешного создания и чтения вылазиет ошибка:
Ошибка 101: Ошибка записи на диск.
Write(F, baza);
School Pak
В некоторых сборках School Pak при попытке выполнить запись в файл, например, с помощью Write(), Writeln(), BlockWrite(), возникает ошибка времени выполнения:
"Ошибка 101: Ошибка записи на диск" (Error 101: Disk write error)
Это происходит из-за того, что в сборке School Pak по умолчанию может быть задан режим доступа к файлам с разрешением только на чтение. Режим доступа устанавливается через системную переменную FileMode (модуль System):
FileMode = 0 - только чтение.
FileMode = 1 - только запись.
FileMode = 2 - разрешено и чтение и запись.
По умолчанию в Borland/Turbo Pascal установлено: FileMode = 2, а в School Pak может быть: FileMode = 0 - только чтение.
Поэтому, чтобы решить эту проблему, надо в самое начало кода основной программы записать строку:
Pascal
1
FileMode := 2;
---
Примечание. Даже если FileMode = 0, но при этом файл открыт через вызов Rewrite(), то к такому файлу открывается доступ в режиме чтение/запись. Поэтому после выполнения Rewrite() запись в файл при любом значении FileMode будет происходить без ошибок. Но если файл открыть через Reset(), то доступ к нему однозначно определяется значением системной переменной FileMode. Как решается эта проблема, описано выше - с помощью присвоения:
Pascal
1
FileMode := 2;
2
Puporev
27.05.2013, 10:50     Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error).
  #11

Не по теме:

Правда теме 2 года...

0
27.05.2013, 10:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 10:50
Привет! Вот еще темы с ответами:

Ошибка "Runtime error" при создании массива
помогите плиз, у меня задачка &quot;создать из 2х одномерных массивов один...

Error 3.Где ошибка?
Найти данные 3 целых чисел-A,B,C.Вычислить их сумму и произведение....

Ошибка Error in statement
вот такой простой код и выдает ошибку &quot;error in statement&quot; в строчке с var, что...

Ошибка Syntax error
У по информатике задание Покавырявшись на форуме я нашел код: Program Sin;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru