|
Вопрос # 2 321/ вопрос открыт / |
|
Здравствуйте!проблема такая: ошибка записи в текстовый файл, при работе программы ругается на Append(f). пробывала смнить атрибуты файла, не помогает.заранее спасибо
 |
Вопрос задала: Milady (статус: Посетитель)
Вопрос отправлен: 20 января 2009, 11:34
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 17; последнее сообщение — 20 января 2009, 13:21; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 20 января 2009, 11:48 [#1]:
Дай кусок кода, где запись, посмотрю.
Попробуй, кстати, поставить
var
ErrorCode: Integer;
begin
AssignFile(...);
{$i-}
Append(...);
// тут - запись в файл
CloseFile(...);
{$i+}
ErrorCode:= IOResult();
if ErrorCode <> 0
then ShowMessage('Код ошибки = ' + IntToStr());
Сообщи, какой код ошибки выдаётся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 20 января 2009, 11:49 [#2]:
Пардон...
ShowMessage('Код ошибки = ' + IntToStr(ErrorCode));
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Milady (статус: Посетитель), 20 января 2009, 11:52 [#3]:
rocedure TForm1.Button2Click(Sender: TObject);
var f:textfile;
begin
If (length(Edit1.Text)=0)
or (length(Edit2.Text)=0)
or (length(Edit3.Text)=0)
or (length(Edit4.Text)=0)
or (length(Edit5.Text)=0)
or (length(Edit9.Text)=0)
then
ShowMessage ('Ошибка ввода данных.'+#13'Все поля должны быть заполнены.')
else
begin
try
AssignFile(f,'produc.txt');
// {$I-}
Append(f);
writeln (f, edit9.text, edit1.text, edit2.text, edit3.text, edit4.text,edit5.text);
closeFile(f);
except
on EInOutError do ShowMessage('Невозможно записать в файл');
end;
end;
end;
ошибка I/O error 32
Спасибо за помощь
|
|
Шичко Игорь (статус: 9-ый класс), 20 января 2009, 12:02 [#4]:
Попробуйте указать путь к файлу.
AssignFile(f, 'C:\produc.txt');
|
|
Milady (статус: Посетитель), 20 января 2009, 12:06 [#5]:
В том то и дело, что нельзя указывать статический путь. Но все равно спасибо
|
|
Шичко Игорь (статус: 9-ый класс), 20 января 2009, 12:14 [#6]:
Тогда привяжитесь к каталогу с программой с помощью процедуры
GetDir(0, dir_);
в переменной dir_ - путь к каталогу с программой
|
|
Milady (статус: Посетитель), 20 января 2009, 12:22 [#7]:
Не помогает ( еще варианты есть? преподаватель из упи говорила, что в дело в том, что у файла стоит атрибут только для чтения, и его надо поменять. поменяли - безрезультатно
|
|
Вадим К (статус: Академик), 20 января 2009, 12:34 [#8]:
Если всё таки указать полный путь к файлу, работает или нет?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Milady (статус: Посетитель), 20 января 2009, 12:36 [#9]:
нет
|
|
Шичко Игорь (статус: 9-ый класс), 20 января 2009, 12:37 [#10]:
Как вы формируете полный путь?
Проверьте через отладчик какое имя файла формируется.
Если файл в каталоге с программой, то его полное имя :
GetDir(0, dir_);
AssignFile(f, dir_ + '\produc.txt'); (кстати, может файл называется product.txt)
|
|
Вадим К (статус: Академик), 20 января 2009, 12:47 [#11]:
Есть ещё один вариант - файл занят другой программой (редактором каким нибудь). Или Виста/ХР/злобный антивирус решили посмотреть, что за файл и не дают его трогать.
Возможно, что игрались с правами и что то напутали.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Milady (статус: Посетитель), 20 января 2009, 12:55 [#12]:
Вот код все прораммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit6: TEdit;
Label8: TLabel;
Edit7: TEdit;
Label9: TLabel;
Edit8: TEdit;
Button1: TButton;
Label10: TLabel;
Memo1: TMemo;
Button2: TButton;
Label11: TLabel;
Label12: TLabel;
Edit9: TEdit;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var f:textfile;
begin
If (length(Edit1.Text)=0)
or (length(Edit2.Text)=0)
or (length(Edit3.Text)=0)
or (length(Edit4.Text)=0)
or (length(Edit5.Text)=0)
or (length(Edit9.Text)=0)
then
ShowMessage ('Ошибка ввода данных.'+#13'Все поля должны быть заполнены.')
else
begin
try
AssignFile(f,'produc.txt');
// {$I-}
Append(f);
writeln (f, edit9.text, edit1.text, edit2.text, edit3.text, edit4.text,edit5.text);
closeFile(f);
except
on EInOutError do ShowMessage('Невозможно записать в файл');
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile;
s:string;
begin
AssignFile(f,'produc.txt');
reset(f);
While Not EOF(f) do
begin
readln(f,s);
form1.Memo1.Lines.Add(s);
end;
closeFile(f);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
f:textfile;
begin
//CloseFile(f);
end;
procedure TForm1.Button3Click(Sender: TObject);
var f:textfile;
begin
AssignFile(f,'produc.txt');
{$I-}
Append(f);
If IOResult=0
then Button2.Enabled:=true
else
begin
rewrite(f);
If IOResult<>0
then Button1.Enabled:=true
else
ShowMessage('Ошибка cоздания файла Produc.txt');
end;
end;
end.
|
|
min@y™ (статус: Доктор наук), 20 января 2009, 12:55 [#13]:
А файл точно тот, что надо? Append будет вываливаться по ошибке, если файл не существует. Проверь имя/путь. Если файл лежит в каталоге программы, то подставляй полный путь:
AssignFile(f, ParamStr(0) + '\produc.txt');
Может всё-таки product.txt, а не produc.txt, а?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 20 января 2009, 12:57 [#14]:
а кто будет в Button3Click закрывать файл? Вот и обяснение, почему потом не получается файл открыть...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Milady (статус: Посетитель), 20 января 2009, 13:14 [#15]:
Спасибо огромное за помощь!вы были правы Вадим К!
|
|
Вадим К (статус: Академик), 20 января 2009, 13:16 [#16]:
дали бы свой код сразу - всё бы сразу и прояснилось. А так развели демагогию, а о том, что надо убирать за собой - забыли...
простое правило - открыл - закрой, выделил память - удали и так дальше.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Milady (статус: Посетитель), 20 января 2009, 13:21 [#17]:
Эх, мне начинающему студенту многое в этой жизни ннепонятно.......
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|