ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
|
1 |
|
31.10.2010, 14:26. Показов 12906. Ответов 18
Работаю с файлами (записываю типизированный файл)
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
31.10.2010, 14:26 |
18 |
960 / 801 / 85 Регистрация: 21.07.2010 Сообщений: 3,522 |
|
31.10.2010, 14:40 |
2 |
PointsEqual, насколько я помню те страховка нужна, типа try
0 |
PointsEqual ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
||||||||||||
31.10.2010, 14:52 [ТС] |
3 |
|||||||||||
ошибка: raised exception class EInOutError with message ‘I/O error 102’ unit1
unit2
указывает на эту строку в UNIT2
0 |
39 / 39 / 2 Регистрация: 19.09.2010 Сообщений: 95 |
|
31.10.2010, 15:25 |
4 |
PointsEqual, на всякий случай проверяйте что копируете из Delphi.
0 |
ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
|
31.10.2010, 15:27 [ТС] |
5 |
кракозябры тут не важны, они появились в результате копирования из делфи в блокнот и на форум. Проблема в ошибке i/o 102
0 |
39 / 39 / 2 Регистрация: 19.09.2010 Сообщений: 95 |
|
31.10.2010, 15:56 |
6 |
кракозябры тут не важны, они появились в результате копирования из делфи в блокнот и на форум. Проблема в ошибке i/o 102 Полностью с Вами согласен, только единственное, что коментарии читать легче — поэтому и написал, а пока пытаюсь найти в своих ресурсах информацию об ошибке. Добавлено через 7 минут 100 101 102 103 104 105 106 Если надо могу перевести. Добавлено через 11 минут
Fmain: file of TZmain; Да кракозябры тут совсем не причем. Закрытая переменная Fmain в UNIT2 встречается у Вас только дважды и нигде не ассоциируется с файлом.
2 |
ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
|
31.10.2010, 16:00 [ТС] |
7 |
sCreator, можете помочь разобратся в каком из юнитов какие переменные нужно оставить а какие лишние? цель:
0 |
__PION__ 960 / 801 / 85 Регистрация: 21.07.2010 Сообщений: 3,522 |
||||||||||||
31.10.2010, 16:17 |
8 |
|||||||||||
PointsEqual, здесь смари такая тема, ты пытаешься открыть файл, не проверив существует ли он, а это не безопасно, прога может сорваться если вдруг не будет фала:
добавь такие вещи, для безопасности
просто имей ввиду Добавлено через 2 минуты
Добавлено через 1 минуту
1 |
ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
|
31.10.2010, 16:20 [ТС] |
9 |
PointsEqual, ты подсоединил UNIT1 для UNIT2, сделай на всякий случай и обратную операцию, и для UNIT3, если она у тя есть ок, но он пока у меня пустой все равно.
0 |
39 / 39 / 2 Регистрация: 19.09.2010 Сообщений: 95 |
|
31.10.2010, 16:24 |
10 |
Во первых определитесь в какой форме он должен находиться, и оставьте в одном экземпляре ( где его местоположение — а то в Вашем примере в первой форме он открывается и на следующей строчке закрывается — я лично не понял). Ага — если правильно понял mainf у Вас форма для редактирования файла.
0 |
ниначмуроФ 851 / 535 / 110 Регистрация: 12.10.2009 Сообщений: 1,913 |
|
31.10.2010, 16:33 [ТС] |
11 |
Ага — если правильно понял mainf у Вас форма для редактирования файла. правильно.
После записи в файл она должна закрыться? да
Во первых определитесь в какой форме он должен находиться, и оставьте в одном экземпляре ( где его местоположение — а то в Вашем примере в первой форме он открывается и на следующей строчке закрывается — я лично не понял). closefile я убрал Добавлено через 1 минуту
0 |
sCreator 39 / 39 / 2 Регистрация: 19.09.2010 Сообщений: 95 |
||||||||
31.10.2010, 16:33 |
12 |
|||||||
Хотя за это мне бы давно по рукам настучали. как и за глобальные переменные типа
1 |
3 / 3 / 0 Регистрация: 16.05.2019 Сообщений: 145 |
|
12.12.2019, 12:25 |
13 |
У меня возникала такая ошибка (IO 102) при отмене диалога сохранения. (к примеру, случайно нажал на него) Ошибка исчезла.
0 |
Модератор 3199 / 1813 / 664 Регистрация: 15.11.2015 Сообщений: 7,259 |
|
12.12.2019, 12:44 |
14 |
Ошибка исчезла. С try скорее всего ошибка не исчезла, а просто скрыта от глаз пользователя. При отмене диалога открытия надо сразу выйти из процедуры, а не пытаться дальше работать с файлом.
0 |
3 / 3 / 0 Регистрация: 16.05.2019 Сообщений: 145 |
|
12.12.2019, 13:49 |
15 |
При отмене диалога открытия надо сразу выйти из процедуры, а не пытаться дальше работать с файлом. Если диалог отменён, то о какой работе может идти речь? Вообще, процесс должен быть автоматически завершаем, со всеми вытекающими.
0 |
mr-Crocodile 2802 / 1481 / 594 Регистрация: 19.03.2019 Сообщений: 4,907 |
||||
12.12.2019, 14:34 |
16 |
|||
Если диалог отменён, то о какой работе может идти речь? так и говорю — о какой?
0 |
Hevard 3 / 3 / 0 Регистрация: 16.05.2019 Сообщений: 145 |
||||
12.12.2019, 15:00 |
17 |
|||
Без Try и Finally при отмене диалога возникала ошибка «I/O error 102»
0 |
Flip 333 / 168 / 68 Регистрация: 25.02.2018 Сообщений: 611 |
||||
12.12.2019, 15:32 |
18 |
|||
А если так?
0 |
AzAtom Модератор 3199 / 1813 / 664 Регистрация: 15.11.2015 Сообщений: 7,259 |
||||||||
12.12.2019, 15:52 |
19 |
|||||||
Без Try и Finally при отмене диалога возникала ошибка «I/O error 102» Примерно так я и понял ситуацию. Без Try…Finally при отмене команда Assign не выполняется, зато выполняется следующая команда Rewrite (DataFile);, что и вызывает ошибку.
Зачем ошибку выкидывать при наличии файла? В SaveDialog есть опция предупреждения, если файл уже существует. Добавлено через 7 минут
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
12.12.2019, 15:52 |
19 |
My teacher assigned me to create a simple project: Create a form, which the user has to complete and when he presses the submit button, then the program should write all the information in different textfiles (For example, 1 textfile for their first name, onother for their last name etc) (i know it sounds insane, but a project is a project). Anyway, i tried this:
procedure TForm1.Button1Click(Sender: TObject); //On Click
var
F:Array[1..20]of textfile; //20 fields, 1 txt each one
Firstname,Fname:string; //Location,Field
Begin
Firstname:=ExtractFilePath(Paramstr(0))+'UserIdentityFirstName.txt'; //Location
Fname:=Edit1.text;
AssignFile(f[1],Firstname);
Rewrite(f[1],Firstname);
writeln(f[1],Fname);
closefile(f[1]);
end;
I searched on the google about this error:
I/O error 102,
All i found is that delphi does not assign the file, for some reasons. But i still don’t get why, the code looks absolutely correct and logical to me, Perhaps what i tried:
F:Array[1..20]of Textfile is wrong, the only reason i tried it, is because i wanted to start writing f1,f2,…,f20
What do you think i should do? Thanks
← →
Guitar ©
(2004-12-24 21:09)
[0]
Я использую компонент SaveDialog1 для сохранения набора данных из ADOQuery1. Когда выполняется SaveDialog1.Execute то появляется стандартный диалог с пользователем. И если нажать «Отмена» то появляется это ошика. Что это значит и как её обработать?
← →
olookin ©
(2004-12-24 21:15)
[1]
Полагаю, что где-то в обработчике сохранения в файл есть что-то подобное:
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
…
…
end else showmessage(«Aborted»);
CloseFile(f);
Ну вы понимаете, да?
← →
begin…end ©
(2004-12-24 21:15)
[2]
> Guitar © (24.12.04 21:09)
См. I/O errors в справке Delphi.
← →
VMcL ©
(2004-12-24 21:16)
[3]
>>
Guitar © (24.12.04 21:09)
>Что это значит
>* 102
* File not assigned
* Reported by Reset, Rewrite, Append, Rename, or Eraseif the file variable has not been assigned a name through a call to Assign or AssignFile.
>как её обработать?
Для начала поискать ошибку в своей программе.
← →
olookin ©
(2004-12-24 21:23)
[4]
[3] VMcL © (24.12.04 21:16)
* File not assigned
* Reported by Reset, Rewrite, Append, Rename, or Eraseif the file variable has not been assigned a name through a call to Assign or AssignFile.
Вот опять я ошибся…
← →
Guitar ©
(2004-12-24 21:29)
[5]
4 olookin © (24.12.04 21:15) [1]
Да именненно такой код и есть.
Дело в нём?
← →
Guitar ©
(2004-12-24 21:31)
[6]
В своей программе ошибку я искал и ищу. Не нашёл. (((
← →
begin…end ©
(2004-12-24 21:36)
[7]
> [6] Guitar © (24.12.04 21:31)
А всё-таки покажите СВОЙ код.
← →
olookin ©
(2004-12-24 21:42)
[8]
Но ведь если судить по моему приблизительному примеру и по [3], то я неправ в корне — 102 не возникает при использовании CloseFile?
← →
Guitar ©
(2004-12-24 21:55)
[9]
procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg(«Ошибка», mtinformation, [mbok], 0);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:=»»;
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+»|»+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage(«Отменено»);
CloseFile(f);
end;
← →
olookin ©
(2004-12-24 21:57)
[10]
procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg(«Ошибка», mtinformation, [mbok], 0);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:=»»;
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+»|»+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage(«Отменено»);
CloseFile(f);
end;
Я правильно понимаю, что в случае ошибки происходит выход из процедуры? А при этом файл уже открыт, но не закрыт…
← →
aus
(2004-12-24 22:03)
[11]
Assign() у тебя выполняется только если Execute, а CloseFile — в любом случае. Так вот при отмене в диалоговом окне Assign не выполняется, но файл закрыть ты пытаешься в конце процедуры. Отсюда ошибка.
← →
begin…end ©
(2004-12-24 22:04)
[12]
> [9] Guitar © (24.12.04 21:55)
Ну вот видите, как просто. Если Вы нажимаете в диалоге кнопку «Отмена», то SaveDialog1.Execute возвращает False. Файловая переменная f не связывается с маршрутом доступа к файлу. И происходит выполнение строки Rewrite(f). КАКОЙ файл прикажете открывать для записи?
← →
olookin ©
(2004-12-24 22:05)
[13]
[11] aus (24.12.04 22:03)
Точно!
← →
Guitar ©
(2004-12-24 22:08)
[14]
Я изменил. Но ничего не получилось.
procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg("Îøèáêà", mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:="";
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+"|"+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage("Îòìåíåíî");
CloseFile(f);
end;
← →
olookin ©
(2004-12-24 22:09)
[15]
[14] Guitar © (24.12.04 22:08)
Но последний CloseFile тоже надо убрать….
← →
begin…end ©
(2004-12-24 22:11)
[16]
> [14] Guitar © (24.12.04 22:08)
Конечно, ничего не изменилось. А что должно было измениться-то? Ситуация, которую я описал в [12], осталась. Вы по-прежнему пытаетесь открыть для записи файл, с которым не связан путь с помощью AssignFile.
← →
Guitar ©
(2004-12-24 22:11)
[17]
[11] aus (24.12.04 22:03)
Вы ПРАВЫ!!!
Тема закрыта.
← →
Guitar ©
(2004-12-24 22:14)
[18]
А нет не прошло, сейчас по другой причине вылазит.
4 begin…end © (24.12.04 22:11) [16]
Сейчас попробую исправить.
← →
begin…end ©
(2004-12-24 22:21)
[19]
> Guitar
Приношу извинения. В [12] и [16] я НЕ ПРАВ. Ошибка в чём-то другом.
Запутался в end»ах.
Ещё раз — извините.
← →
olookin ©
(2004-12-24 22:25)
[20]
Э… А если exception не срабатывет, то все остальное работает отлично, да?
← →
Guitar ©
(2004-12-24 22:27)
[21]
КОроче я сам запутался. )))))))))ХА ХА)))
Буду искать. )))
← →
olookin ©
(2004-12-24 22:28)
[22]
Но хотя бы отладчик где отсанавливается?
← →
Zeqfreed ©
(2004-12-24 22:36)
[23]
Так должно работать:
procedure TForm1.Button6Click(Sender: TObject);
var
fname, Str : string;
f : TextFile;
i : Integer;
begin
fname := edit6.text;
SaveDialog1.Filename := fname;
if SaveDialog1.Execute then begin
AssignFile(f, SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg("Error?", mtinformation, [mbok], 0);
CloseFile(f);
Exit;
end;
Rewrite(f);
while not ADOQuery1.EOF do begin
Str := "";
for i := 0 to ADOQuery1.FieldCount - 1 do begin
Str := Str + "|" + ADOQuery1.Fields[i].AsString;
WriteLn(f, Str);
ADOQuery1.Next;
end;
end;
CloseFile(f);
end else showmessage("Cancel");
end;
← →
Guitar ©
(2004-12-24 22:36)
[24]
Вот такой вопрос. Это я плохо поимаю. В коде try
ADOQuery1.First;
except
messagedlg("Îøèáêà", mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
Когда срабатывает exit
, то программы выходит из процедуры procedure TForm1.Button6Click(Sender: TObject);
или какой то её части?
← →
Zeqfreed ©
(2004-12-24 22:40)
[25]
Выходит из процедуры…
← →
Guitar ©
(2004-12-24 22:43)
[26]
4 Zeqfreed
А что изменилось. И зачем?
← →
Zeqfreed ©
(2004-12-24 22:49)
[27]
Много чего вообщето
procedure TForm1.Button6Click(Sender: TObject);
var
fname, Str : string;
f : TextFile;
i : Integer;
begin
fname := edit6.text;
SaveDialog1.Filename := fname;
if SaveDialog1.Execute then begin
AssignFile(f, SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg("Error?", mtinformation, [mbok], 0);
CloseFile(f);
Exit;
end; //Закончить обработку исключительной ситуации надо?
Rewrite(f);
while not ADOQuery1.EOF do begin
Str := "";
for i := 0 to ADOQuery1.FieldCount - 1 do begin
Str := Str + "|" + ADOQuery1.Fields[i].AsString;
WriteLn(f, Str);
ADOQuery1.Next;
end; //чтобы все 3 строки выполнялись в цикле
end;
CloseFile(f);
end else showmessage("Cancel");
end;
Ещё что-то вроде менял, не помню
Ты попробовал? не работает?
← →
Zeqfreed ©
(2004-12-24 22:50)
[28]
хм, сорри, вроде энд там и был, запутался ) сорри
← →
Zeqfreed ©
(2004-12-24 22:51)
[29]
блин, ваще все нафиг перепутал я там ))
спать видимо пора
← →
Guitar ©
(2004-12-24 22:53)
[30]
Сейчас ошибка стала появляться в результате другого события. Если в ADOQuery нет данных. А пользователь всё-равно пытается сохранить файл.
Может это о чём-то кому-то скажет…
← →
Guitar ©
(2004-12-24 22:55)
[31]
Эта ошибка появляется после моего сообщения «Ошибка».
try
ADOQuery1.First;
except
messagedlg("Îøèáêà", mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
← →
Zeqfreed ©
(2004-12-24 22:55)
[32]
а может попробовать назначить файл после ADO…First?
← →
Zeqfreed ©
(2004-12-24 22:56)
[33]
какая именно ошибка? EDatabaseError?
← →
Guitar ©
(2004-12-24 23:01)
[34]
Не, её то как раз я пытался обработать этим кодом, что выше. А после моего сообщения вылазит системная ошибкаProject1:I/O error 102
← →
Guitar ©
(2004-12-24 23:10)
[35]
Всё. Сделал. ))) Тема закрыта.
|
Ошибка I/O error 102 21.05.2012, 17:45 |
20/05/11 |
Ошибка «I/O error 102» указывает на строчку Код: Rewrite(name1); Подскажите, пожалуйста, как исправить, почему появляется
|
|
|
Pavia |
Re: Ошибка I/O error 102 21.05.2012, 19:44 |
31/10/08 |
Natalya23 Учитесь пользоваться справкой. 102 File not assigned Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.
|
|
|
arseniiv |
Re: Ошибка I/O error 102 21.05.2012, 19:49 |
||
27/04/09 |
Именно. Но иногда в справке можно не то искать — в таком случае, можно что-то найти в интернете. Набрал в Google «Delphi IO error 102»: Вольный перевод текста из справки: file not assigned возникает тогда, когда вы пытаетесь выполнить операции с файловой переменной, которой не присвоено никакое имя файла — забыли вызвать Assign или AssignFile (то же самое).
|
||
|
|||
hurtsy |
Re: Ошибка I/O error 102 22.05.2012, 11:28 |
01/07/08 |
Natalya23 Есть ещё стандартный способ. Код: try
|
|
|
Joker_vD |
Re: Ошибка I/O error 102 22.05.2012, 15:29 |
||
09/09/10 |
А есть еще вариант получше — забыть про Assign/Rewrite как страшный сон и использовать стримы.
|
||
|
|||
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы
Go Up to Delphi Compiler Errors Index
I/O (input-output) errors cause an exception to be thrown if a statement is compiled in the {$I+}
state. (If the application does not include the System.SysUtils unit, the exception causes the application to terminate).
Handling I/O Errors
In the {$I-}
state, the program continues to execute, and the error is reported by the IOResult function.
I/O Error List
The following table lists all I/O errors, numbers, and descriptions.
Number |
Name |
Description |
100 |
Disk read error |
Reported by Read on a typed file if you attempt to read past the end of the file. |
101 |
Disk write error |
Reported by CloseFile, Write, WriteIn, or Flush if the disk becomes full. |
102 |
File not assigned |
Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile. |
103 |
File not open |
Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open. |
104 |
File not open for input |
Reported by Read, Readln, Eof, Eoln, SeekEof, or SeekEoln on a text file if the file is not open for input. |
105 |
File not open for output |
Reported by Write or Writeln on a text file if you do not generate a Console application. |
106 |
Invalid numeric format |
Reported by Read or Readln if a numeric value read from a text file does not conform to the proper numeric format. |
See Also
- Exception Handling
- Resolving Internal Errors (Delphi)
- Delphi Run-Time Errors
- Fatal errors
- Operating system errors