Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 321

/ вопрос открыт /

Здравствуйте!проблема такая: ошибка записи в текстовый файл, при работе программы ругается на Append(f). пробывала смнить атрибуты файла, не помогает.заранее спасибо

Milady Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Milady (статус: Посетитель)
Вопрос отправлен: 20 января 2009, 11:34
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 20 января 2009, 13:21; участников в обсуждении: 4.
min@y™

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™

min@y™ (статус: Доктор наук), 20 января 2009, 11:49 [#2]:

Пардон...
ShowMessage('Код ошибки = ' + IntToStr(ErrorCode));
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Milady

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

Milady (статус: Посетитель), 20 января 2009, 12:06 [#5]:

В том то и дело, что нельзя указывать статический путь. Но все равно спасибо
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 20 января 2009, 12:14 [#6]:

Тогда привяжитесь к каталогу с программой с помощью процедуры
GetDir(0, dir_);
в переменной dir_ - путь к каталогу с программой
Milady

Milady (статус: Посетитель), 20 января 2009, 12:22 [#7]:

Не помогает :(( еще варианты есть? преподаватель из упи говорила, что в дело в том, что у файла стоит атрибут только для чтения, и его надо поменять. поменяли - безрезультатно
Вадим К

Вадим К (статус: Академик), 20 января 2009, 12:34 [#8]:

Если всё таки указать полный путь к файлу, работает или нет?
Галочка "подтверждения прочтения" - вселенское зло.
Milady

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

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™

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

Milady (статус: Посетитель), 20 января 2009, 13:14 [#15]:

Спасибо огромное за помощь!вы были правы Вадим К!
Вадим К

Вадим К (статус: Академик), 20 января 2009, 13:16 [#16]:

дали бы свой код сразу - всё бы сразу и прояснилось. А так развели демагогию, а о том, что надо убирать за собой - забыли...
простое правило - открыл - закрой, выделил память - удали и так дальше.
Галочка "подтверждения прочтения" - вселенское зло.
Milady

Milady (статус: Посетитель), 20 января 2009, 13:21 [#17]:

Эх, мне начинающему студенту многое в этой жизни ннепонятно.......:)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.04 сек.