powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32 при Exception
25 сообщений из 44, страница 1 из 2
Ошибка 32 при Exception
    #40030805
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день! Помогите, пожалуйста, с конструкцией:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
....
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      Append(f);
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
    end;



Данная конструкция находится в OnTimer и ее задача - однократно вывести ошибку в лог. Но при этом возникает ошибка IO 32. Что здесь не так? Спасибо!
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030808
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
Коллеги, добрый день! Помогите, пожалуйста, с конструкцией:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
....
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      Append(f);
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
    end;




Данная конструкция находится в OnTimer и ее задача - однократно вывести ошибку в лог. Но при этом возникает ошибка IO 32. Что здесь не так? Спасибо!


файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...



И таки где в коде assignfile ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030810
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно это означает что файл занят другим приложением.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030811
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cobalt747
Обычно это означает что файл занят другим приложением.


возможно, ТС не выполнил CloseFile - где-то свалилось ДО этого
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030814
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
И таки где в коде assignfile ?


Он выше, в Try.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030815
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
И таки где в коде assignfile ?


Он выше, в Try.[/quote]

и зачем он в TRY ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030816
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
и зачем он в TRY ?


Там тоже есть, что писать в лог
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030821
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator

файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...




Так тоже не работает - в лог ничего не попадает
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030824
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
defecator

файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...





Так тоже не работает - в лог ничего не попадает


а почему должно попадать, если у тебя ошибка никуда не делась ?

Давай, вываливай сюда весь код, а не кусок
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030827
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
procedure TForm1.Timer1Timer(Sender: TObject);
var

fwNew, ActiveWindow : HWND;
 f,fil:TextFile;
 FileDir, result, resultfin, resultpath, filedesc :String;
 Path: array [0..MAX_PATH] of Char;
 today, totime : TDateTime;
 pProcID : ^DWORD;
 procid: cardinal;


begin
 Try
  ActiveWindow:=GetForegroundWindow;

if GetWindowTitle(ActiveWindow)<>ttl then

begin

fw:=GetForegroundWindow;
if ShGetSpecialFolderPath(Application.Handle, Path, CSIDL_APPDATA, False) then
      if not DirectoryExists(Path+'\winactivitybeat')
              then if not CreateDir(Path+'\winactivitybeat') then raise Exception.Create('Ошибка создания каталога') ;

   Filedir:=Path+'\winactivitybeat'+'\log.txt';
AssignFile(f,FileDir);
if not FileExists(FileDir) then
 begin
  Rewrite(f);
  CloseFile(f);
 end;
Append(f);
today := Date;
totime := Time;
result:=getprocimagename(TakeProcessID(GetWindowTitle(ActiveWindow)));
resultpath:=Getpathfrompid(TakeProcessID(GetWIndowTitle(ActiveWindow)));
label2.Caption:=result;
memo1.Lines.Clear;
memo1.Lines.Add(GetExeVersionData(resultpath).FileDescription);
 filedesc:=memo1.Lines.Text;
Write(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+GetWindowTitle(fw)+'       '+filedesc);
Flush(f);
CloseFile(f);
ttl:=GetWindowTitle(fw);
Label1.Caption:='Пишем в '+filedir;
Form1.ClientWidth:=Label1.ClientWidth+15;
end;
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      closefile(f);
      {$I-}
      Append(f);
      {$I+}
      if IOresult <> 0 then begin
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message+'     '+Message1);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
      end;
      closefile(f);
    end
end;
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030832
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fresh Meat,

работай через TStringList. И Label не понадобится, да и вообще...
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030833
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko
да и вообще...

Такой извращенный дебаггинг у меня))
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030837
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat,

чудовищная мешанина

сделай отдельную процедуру записи данных в лог
типа такой (это только образец, писал в блокнотике)
ну и не забудь эксепшены ловить где-то, или используй IOResult и {$I-}/{$I+}

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure AppendLog(const aFileName : string; const aData : string);
var
  f : TextFile ;
begin   
   AssignFile(f, aFileName);
   try
     if not FileExists(aFileName)  then 
        Rewrite(f) 
      else 
        begin
               Reset(f) ;
               Append(f) ;
        end ;

     Write(f, aData) ;
   finally
     CloseFile(f) ;
   end ;
end ;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030839
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В результате вся твоя помойка сведётся к такому коду

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
procedure TForm1.Timer1Timer(Sender: TObject);
var
  fwNew, ActiveWindow: HWND;
  f, fil: TextFile;
  FileDir, Result, resultfin, resultpath, filedesc: String;
  Path: array [0 .. MAX_PATH] of Char;
  today, totime: TDateTime;
  pProcID: ^DWORD;
  procid: cardinal;
begin
  Try
    ActiveWindow := GetForegroundWindow;

    if GetWindowTitle(ActiveWindow) <> ttl then

    begin

      fw := GetForegroundWindow;
      if ShGetSpecialFolderPath(Application.Handle, Path, CSIDL_APPDATA, False)
      then
        if not DirectoryExists(Path + '\winactivitybeat') then
          if not CreateDir(Path + '\winactivitybeat') then
            raise Exception.Create('Ошибка создания каталога');

      FileDir := Path + '\winactivitybeat' + '\log.txt';

      today := Date;
      totime := Time;
      Result := getprocimagename(TakeProcessID(GetWindowTitle(ActiveWindow)));
      resultpath := Getpathfrompid(TakeProcessID(GetWindowTitle(ActiveWindow)));
      label2.Caption := Result;
      memo1.Lines.Clear;
      memo1.Lines.Add(GetExeVersionData(resultpath).FileDescription);
      filedesc := memo1.Lines.Text;

      { пишем в лог }
      AppendLog(FileDir, DateToStr(today) + ' ' + TimeToStr(totime) + '   ' +
        label2.Caption + '    ' + GetWindowTitle(fw) + '       ' + filedesc);

      ttl := GetWindowTitle(fw);
      Label1.Caption := 'Пишем в ' + FileDir;
      Form1.ClientWidth := Label1.ClientWidth + 15;
    end;
  except
    on E: Exception do
      if Label5.Caption <> E.Message then
      begin
        { пишем в лог }
        AppendLog(FileDir, DateToStr(today) + ' ' + TimeToStr(totime) + '   ' +
          label2.Caption + '    ' + E.Message + '     ' + Message1);

        Label5.Caption := E.Message;
      end
  end;
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030843
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030850
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..


reset выкини, я же сказал, что в блокнотике писал.
ТЫ вообще подумать не хочешь ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030860
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
reset выкини

Все заработало, ура! Большое спасибо за помощь!
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030869
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жуть! Вот вы открыл файл в верхнем блоке, потом у вас вывалилось исключение, потом вы опять открываете (уже открытый файл) в except блоке.

Как должно быть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
AssignFile(F, FileName);
// Открываем файл
if FileExists(FileName) then
  Append(F)
else
  Rewrite(F);
try
  try
    // что-то делаем
    Writeln(F, 'Process');  // логируем
    // еще что-то делаем
  except
    on E: Exception do
      Writeln(F, E.Message); // Если произошло исключение, то записываем
  end;
finally
  CloseFile(F);  // всегда закрываем файл
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030950
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф: сталкивался с такой проблемой:

записывал в файл через Поток.SaveToFile()
Повторное действие SaveToFile() иногда заканчивалось "Файл занят".
При этом он прекрасно открывался и редактировался блокнотом.

Никаких конкурентных записей в файл заведома не было.
Между записями были длинные паузы.
Выходит SaveToFile() иногда оставляет блокировку ?

Проблема плавающая и ее сложно повторить.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030985
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Выходит SaveToFile() иногда оставляет блокировку ?
Зависит от реализации. Если там по классике
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SaveToFile(const AFileName: string);
var
  Strm: TStream;
begin
  Strm := TFileStream.Create(AFileName, fmCreate);
  try
    SaveToStream(Strm);
  finally
    Strm.Free;
  end;
end;

то никаких блокировок, после выхода из метода, быть не может
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030998
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
то никаких блокировок, после выхода из метода, быть не может
Бывает, антивирус некоторое время держит файл после редактирования (любым способом).
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031149
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.12.2020 22:33, YuRock пишет:
> Бывает, антивирус некоторое время держит файл после редактирования (любым способом).

антивирус - ЗЛО
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031157
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антивирус не зло, а источник дохода для его разработчика,
но ставить антивирусное ПО на девелоперскую машину,
действительно, довольно странно. Это для тупых юзеров
в основном (вирусы разные бывали, особенно в прошлом).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031161
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fresh Meat,
IMHO, заниматься открытием файла (а это операция, которая способна приводить к проблемам), когда уже что-то пошло не так - идея не очень. Проще и лучше, если программа ведет лог - при старте (в секции Initialize модуля логирования) программы открыть файл лога, если не получилось, открыть другой файл или еще как-то компенсировать проблему. Потом, в отдельной процедуре WriteLog, обвешав try/except и критической секцией выводить в уже открытый файл. В секции finalize модуля логирования закрыть файл.
Вместо того, чтобы при каждом исключении думать об открытии файла и решении всяких связанных с этим проблем, просто пишете:
Код: sql
1.
2.
3.
4.
5.
6.
uses ...,UMyLogger,...;

...
except
  on e:exception do WriteLog('Beda v MyProc: %s',[e.Message]);
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031184
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
x1ca4064
Код: sql
1.
UMyLogger



тут бы ещё содержание UMyLogger посмотреть
а то ведь на словах-то одно, а как оно там получится реально - совсем другое
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32 при Exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]