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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2011, 00:50   #1
kvg_ua
 
Регистрация: 03.03.2011
Сообщений: 4
По умолчанию Проблема открытия файла

У меня возникла проблема при работе с файлами. При нажатии кнопки программа открывает текстовый файл (filename) для считывания, считывает находящуюся в нем информацию и переписывает ее в файл filename.bak. Затем программа должна открыть файл filename для перезаписи и записать в него новую информацию. Но на этом месте программа выдает сообщение "I/O error 32". Помогите, пожалуйста, найти ошибку.
Код:
procedure TForm4.command1Click(Sender: TObject);
begin
    filename := Text1.Text;
    assignfile(f, filename);
    reset(f);
    read(f, n, numtheme); readln(f, nametheme);
    For i := 1 To n do
      begin
        readln(f, numqu[i]);
        readln(f, question[i]);
        readln(f, var1[i]);
        readln(f, var2[i]);
        readln(f, var3[i]);
        readln(f, var4[i]);
      end;
    For i := 1 To n do
        readln(f, at[i]);
    Closefile(f);
    num := 1;
    Text4.Text := nametheme;
    Text9.Text := inttostr(n);
    Text8.Text := inttostr(numqu[num]);
    Text2.Text := question[num];
    Text3.Text := var1[num];
    Text5.Text := var2[num];
    Text6.Text := var3[num];
    Text7.Text := var4[num];
    filename := inttostr(numtheme) + '.bak';
    assignfile(f, filename);
    rewrite(f);
        write(f, n, ' ', numtheme, ' '); writeln(f, nametheme);
        For i := 1 To n do
          begin
            writeln(f, numqu[i]);
            writeln(f, question[i]);
            writeln(f, var1[i]);
            writeln(f, var2[i]);
            writeln(f, var3[i]);
            writeln(f, var4[i]);
          end;
        For i := 1 To n do
            writeln(f, at[i]);
    Closefile(f);

    filename := inttostr(numtheme);
    assignfile(f, filename);
    append(f);
      write(f, '');
    closefile(f);
end;
kvg_ua вне форума Ответить с цитированием
Старый 03.03.2011, 00:55   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

сначала закрыть его надо
по видимому в тот момент он еще используется

Последний раз редактировалось unbanned; 03.03.2011 в 00:57.
unbanned вне форума Ответить с цитированием
Старый 03.03.2011, 00:59   #3
kvg_ua
 
Регистрация: 03.03.2011
Сообщений: 4
По умолчанию

Так я его закрыл - Closefile(f);
kvg_ua вне форума Ответить с цитированием
Старый 03.03.2011, 01:03   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

ну 32я ошибка значит что файл используется
попробуй записывать в f2...
Код:
assignfile(f2, filename);
    rewrite(f2);

Последний раз редактировалось unbanned; 03.03.2011 в 01:06.
unbanned вне форума Ответить с цитированием
Старый 03.03.2011, 17:01   #5
kvg_ua
 
Регистрация: 03.03.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от unbanned Посмотреть сообщение
ну 32я ошибка значит что файл используется
попробуй записывать в f2...
Код:
assignfile(f2, filename);
    rewrite(f2);
Попробовал - результат тот же. Я пробовал удалить файл через проводник при запущенной программе - появляется сообщение о том, что файл нельзя удалить так как он занят другой программой. Удалить его удается только после закрытия программы
kvg_ua вне форума Ответить с цитированием
Старый 05.03.2011, 13:08   #6
kvg_ua
 
Регистрация: 03.03.2011
Сообщений: 4
По умолчанию

Все! проблема решена!
Дело в том, что в событии OnCreate у меня был такой код
Код:
   assignfile(f, filename);
   {$I-}
   reset(f);
   {$I+}
   if ioresult<>0 then n11.Visible:=false;
Таким образом я открыл файл для считывания, и он остался открытым. Отсюда и ошибка при попытке удаления или перезаписи данного файла. Я понимаю, что использовать выше указанный код для проверки существования файла глупо, но тогда я еще не подозревал о существовании функции FileExists. После замены приведенного кода на
Код:
if not(FileExists(filename)) then n11.Visible:=false;
ошибка исчезла и все заработало
kvg_ua вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытия файла Ayubkhon Общие вопросы Delphi 3 08.06.2010 13:38
Ошибка открытия файла mutabor Общие вопросы Delphi 7 28.09.2009 18:33
Открытия файла из listBox SergGhost Помощь студентам 3 21.05.2009 21:56
Дата и время открытия файла drakosha163 Помощь студентам 0 12.04.2009 19:20
Ошибка открытия файла в Image Лукманов Александр Общие вопросы Delphi 2 18.03.2009 14:16