Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2012, 21:18   #1
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию Проблема с пеименованием текстогого файла

Пишу программу "записная книжка".

Хочу, чтобы файл переименовывался когда вводишь в поле Edit.
Но дело в том, что вылетает вот такая вот ошибка (смотрим картинку).
Помогите пожалуйста разобраться в чём ошибка.

Текст процедуры переименования такой:

прошу прощения, варианта подсветки кода для Delphi не нашёл

Код:
 Edit1.Enabled:=true;
  name:=Edit1.text;
  Assignfile(a, 'C:\book\'+name+'.txt');
  Rename(a,name);
  closefile(a);
Весь код программы:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    MaskEdit1: TMaskEdit;
    BitBtn1: TBitBtn;
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:textfile;
  name:string;

implementation

{$R *.dfm}

////////////////////////////////////////////////
//сохранение файла при нажатии на любую кнопку//
procedure save_progress();                    //
begin                                         //
  assignfile(a, 'C:\book\'+name+'.txt');      //
  rewrite(a);                                 //
  write(a,Form1.Memo1.text);                  //
  closefile(a);                               //
end;                                          //
////////////////////////////////////////////////

//инициализация///////////////////////////////////////////
procedure init();                                       //
var                                                     //
  buf:string[80];                                       //
  a:textfile;                                           //
begin                                                   //
  name:='1';                                            //
  Form1.Edit1.Text:='Новая';                            //
  Form1.Memo1.Clear;//чищу мемо                         //
  if fileExists('C:\book\'+name+'.txt') then //ищу файл //
  begin                                                 //
    Assignfile(a, 'C:\book\'+name+'.txt'); //если нашёл //
    Reset(a);                                           //
    While not eof(a) do                                 //
      begin                                             //
        Readln(a,buf);                                  //
        Form1.Memo1.Lines.Add(buf);                     //
      end;                                              //
    Closefile(a);                                       //
  end                                                   //
  else                                                  //
  begin  //если не нашёл создаёт новый                  //
    FileCreate('C:\book\'+name+'.txt');                 //
   // Assignfile(a, 'C:\book\'+name+'.txt');            //
    Closefile(a);                                       //
  end;                                                  //
end;                                                    //
//////////////////////////////////////////////////////////

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  save_progress();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 init();
end;


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Edit1.Enabled:=true;
  name:=Edit1.text;
  Assignfile(a, 'C:\book\'+name+'.txt');
  Rename(a,name);
  closefile(a);
end;

//создание нового файла
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//не дописал ещё
end;

end.
Изображения
Тип файла: jpg Снимок.JPG (24.0 Кб, 88 просмотров)

Последний раз редактировалось Stilet; 16.11.2012 в 01:16. Причина: название сменил
Huruffus вне форума Ответить с цитированием
Старый 15.11.2012, 23:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

о! похоже, Вам удалось наступить на особые грабли!!
вместо Name возьмите любой другой идентификатор. например
Код:
var NewFileName : string;
begin
  Edit1.Enabled:=true;
  NewFileName:=Edit1.text;
  Assignfile(a, 'C:\book\ЛяляФа.txt');
  Rename(a,NewFileName);
  closefile(a);
end;
p.s. разумеется, код дан исключительно для примера. Доработайте его под себя.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2012, 00:31   #3
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

охоу! "name" это некая зарезервированная переменная?

Большое спасибо! 2 дня не мог ничего поделать

Последний раз редактировалось Huruffus; 16.11.2012 в 00:53.
Huruffus вне форума Ответить с цитированием
Старый 16.11.2012, 21:30   #4
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

Проблемы продолжаются.

в том случае, если файл не создан: запускаем программу, создаётся пустой файл 1.txt. Пытаемся вводить текст, но появляется ошибка (картинка) и в коде программы подсвечивается синей полосой rewrite(a) (картинка).

а если файл создан, то всё гладко сохраняется.

Скажите пожалуйста в чём дело?


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    MaskEdit1: TMaskEdit;
    BitBtn1: TBitBtn;
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:textfile;
  FileName:string;
  OldName:string;
  b:textfile;
  info_filename:string;
  buf:string[80];

implementation

{$R *.dfm}

/////////////////////////////////////////////////////////////////////
//Ïåðåèìåíîâàíèå ôàéëà                                    //
procedure rename_file();                                           //
begin                                                              //
  Form1.Edit1.Enabled:=true;                                             //
  OldName:=FileName;                                               //
  FileName:=Form1.Edit1.text;                                            //
  Renamefile('C:\book\'+OldName+'.txt','C:\book\'+FileName+'.txt');//
end;                                                               //
/////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////
//ñîõðàíåíèå ôàéëà ïðè íàæàòèè íà ëþáóþ êíîïêó//
procedure save_progress();                    //
begin                                         //
  assignfile(a,'C:\book\'+FileName+'.txt');   //
  rewrite(a);                                 //
  write(a,Form1.Memo1.text);                  //
  closefile(a);                               //
end;                                          //
////////////////////////////////////////////////

//èíèöèàëèçàöèÿ///////////////////////////////////////////////
procedure init();                                           //
begin                                                       //
  FileName:='1';                                            //
  Form1.Edit1.Text:='Íîâàÿ';                                //
  Form1.Memo1.Clear;//÷èùó ìåìî                             //
  if fileExists('C:\book\'+FileName+'.txt') then //èùó ôàéë //
  begin                                                     //
    Assignfile(a, 'C:\book\'+FileName+'.txt'); //åñëè íàø¸ë //
    Reset(a);                                               //
    While not eof(a) do                                     //
      begin                                                 //
        Readln(a,buf);                                      //
        Form1.Memo1.Lines.Add(buf);                         //
      end;                                                  //
    Closefile(a);                                           //
  end                                                       //
  else                                                      //
    FileCreate('C:\book\'+FileName+'.txt');                 //
                                                            //
end;                                                        //
//////////////////////////////////////////////////////////////

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  save_progress();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 init();
end;

//ñîçäàíèå íîâîãî ôàéëà
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//íå äîïèñàë åù¸
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  rename_file();
end;

//ñîõðàíåíèå èìåíè ïîñëåäíåãî ôàéëà ïðè çàêðûòèè äëÿ ïîñëåäóþùåãî îòêðûòèÿ
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if fileExists('C:\book\info_'+filename+'.txt') then
  begin
    assignfile(b,'C:\book\info_'+filename+'.txt');
    rewrite(b);
    write(b,Edit1.text);
    closefile(b);
  end
  else
  begin
    Filecreate('C:\book\info_'+filename+'.txt');
    assignfile(b,'C:\book\info_'+filename+'.txt');
    rewrite(b);
    write(b,Edit1.text);
    closefile(b);
  end;
end;

end.
Изображения
Тип файла: jpg Снимок.JPG (89.6 Кб, 128 просмотров)

Последний раз редактировалось Huruffus; 16.11.2012 в 21:34.
Huruffus вне форума Ответить с цитированием
Старый 16.11.2012, 21:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Похоже на то что файл уже кем-то открыт...
Ты до этого кода в программе нигде файл не открываешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2012, 22:42   #6
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

нет. проверял уже.
closefile есть везде.
Huruffus вне форума Ответить с цитированием
Старый 16.11.2012, 22:50   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
write(a,Form1.Memo1.text);
А замени на всякий случай на writeln, все равно ты работаешь с текстовыми файлами.
и еще такой вариант:
Код:
procedure save_progress();                    //
begin                                         //
 with TStringList.Create do begin
  LoadFromFile('C:\book\'+FileName+'.txt');
  append(Form1.Memo1.text);
  SaveToFile('C:\book\'+FileName+'.txt');
  Free;
 end; 
end;
как по мне он лучше.
Хотя в твоем случае LoadFromFile (судя по твоему коду) писать не надо, т.е. не надо делать загрузку файла, перезаписывая его каждый раз
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2012, 23:02   #8
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

ваш вариант не работает тоже. Пишет: нет доступа к файлу.
Huruffus вне форума Ответить с цитированием
Старый 16.11.2012, 23:10   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нет доступа к файлу.
Ну тогда ищи, кто у тебя этот файл открыл и не пускает )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2012, 23:59   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Смотри процедуру Init. Если файл существует, то он закрывается, если нет - создается и остается открытым. Не в этом ли вся проблема?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с открытием файла Dady 1992 Общие вопросы C/C++ 5 25.06.2012 18:40
Проблема с удалением файла Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.06.2011 20:15
Проблема открытия файла kvg_ua Помощь студентам 5 05.03.2011 13:08
Проблема с чтением из файла slamm PHP 12 16.01.2010 16:40
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10