Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 11.01.2018, 00:44   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 305
Репутация: 16
По умолчанию Append – почему не работает “if”, а работает “try”

Доброе время суток,

Есть

Код:

var
  LConnectFile: TextFile;
  LFile: string;
  begin
   LFile := 'D:\1.txt';
   AssignFile(LConnectFile, LFile);

   if FileExists(LFile) then
     showmessage('file exsist')
     …

сообщение 'file exsist' выпадает.

А при

Код:

if FileExists(LFile) then
  Append(LConnectFile)

При отладке, эта строка просто ПРОПУСКАЕТСЯ? (хотя файл существует)

Нужно пользоваться конструкцией

Код:

try
  Append(LConnectFile); 
  WriteLn(LConnectFile, 'добавление в файл');      
except
on e: EInOutError do
  showmessage('not exsist');
end;
closefile(LConnectFile);
end;

а мне нужно проверить существование файла, если он есть, то дополнить, а если не то создать новый

заранее спасибо

Последний раз редактировалось KBO; 11.01.2018 в 02:02.
KBO на форуме   Ответить с цитированием
Старый 11.01.2018, 08:48   #2
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,102
Репутация: 1172
По умолчанию

Судя по всему, в первом случае у Вас файл действительно существует (и кстати, Ассайн нужно делать после проверки на существование, а не до, а то падать будет раньше).

В остальных случаях, судя по поведению, программа не может найти файл. Соответственно, с ифом она игнорирует аппенд, так как условие не проходит, а с траем обрабатывает исключение. Поскольку полного кода для этих случаев Вы не привели - дальше остаётся только гадать, почему файл не находится
__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Старый 11.01.2018, 11:24   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,416
Репутация: 5187
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
(и кстати, Ассайн нужно делать после проверки на существование, а не до, а то падать будет раньше)
на AssignFile падать не должно - иначе как бы можно было вызвать Rewrite() ?
можно легко проверить:
Код:

var
  myFile : TextFile;
begin
  // Попытка открыть файл NewTest.txt для записи
  AssignFile(myFile, 'NewTest.txt');
  ReWrite(myFile);

  // Закрытие файла
  CloseFile(myFile);
end.

но, чтобы говорить, что не так у TC, я бы действительно хотел увидеть весь код полностью.

Пока, могу только предположить, что файл просто не закрывается и хендл остаётся захваченным. Поэтому и не срабатывает Append()
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 11.01.2018, 16:45   #4
IliaIT
Участник клуба
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 916
Репутация: 489
По умолчанию

хмм если не путаю то AssignFile это не открытие файла, а связывание файловой переменной с определённым путём файла.
в итоге тебе этот код надо? тут if пропускает или нет?

Код:

var
  LConnectFile: TextFile;
  LFile: string;
begin
   LFile := 'D:\1.txt';
   AssignFile(LConnectFile, LFile);
   if FileExists(LFile) then
     Append(LConnectFile)
   else
     ReWrite(LConnectFile);
   WriteLn(LConnectFile, 'добавление в файл');
   CloseFile(LConnectFile);
end;

__________________
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 11.01.2018 в 16:50.
IliaIT вне форума   Ответить с цитированием
Старый 11.01.2018, 19:15   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 305
Репутация: 16
По умолчанию

Вот пожалуйста, полный код:

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  LConnectFile: TextFile;
  LFile: string;
begin
  LFile := 'D:\1.txt';
  AssignFile(LConnectFile, LFile);

  if FileExists(LFile) then
    showmessage('exsist');
        
  if FileExists(LFile) then
    Append(LConnectFile) 
  else showmessage('not exsist');
end;

заходит на строку "showmessage('exsist');", т.к. файл действительно существует.
А при втором варианте ("F8") строку "Append(LConnectFile)" пропускает
KBO на форуме   Ответить с цитированием
Старый 11.01.2018, 19:49   #6
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,373
Репутация: 2407

icq: 438888048
По умолчанию

Действительно, визуально при отладке он пропускает строку, но если сделать F7, то станет понятно, что он заходит в Append. Не знаю, с чем связан такой визуальный баг. Если добавить begin..end, то не будет "пропускать".
Код:

var
  LConnectFile: TextFile;
  LFile: string;
begin
  LFile := 'E:\test.txt';
  AssignFile(LConnectFile, LFile);

  if FileExists(LFile) then
    showmessage('exsist');

  if FileExists(LFile) then begin
    Append(LConnectFile);
  end else showmessage('not exsist');
end;

__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.01.2018 в 19:55.
BDA вне форума   Ответить с цитированием
Старый 12.01.2018, 03:30   #7
northener
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,392
Репутация: 447
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
заходит на строку "showmessage('exsist');", т.к. файл действительно существует.
А при втором варианте ("F8") строку "Append(LConnectFile)" пропускает
Это весьма старая недоработка отладчика. В первом случае выполняется весьма существенное для отладки действие. А именно показывается showmessage. Пропустить эту строку отладчик "по определению" не может.
А во втором варианте строка
Цитата:
Сообщение от BDA Посмотреть сообщение
Append(LConnectFile)
ничего особенного не делает с точки зрения отладчика. Она лишь продолжение строки
Код:

if FileExists(LFile) then

northener вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему прсер работает на одних сайтах и не работает на других PHP_DELETANT PHP 4 12.02.2016 14:45
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? ion leahu Помощь студентам 6 23.11.2014 20:36
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 10:56
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04
Почему не работает тег align=right?valign работает а align нет! aviv HTML и CSS 5 21.01.2009 18:46


23:02.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru