Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32 при Exception / 25 сообщений из 44, страница 1 из 2
24.12.2020, 13:59
    #40030805
Fresh Meat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Коллеги, добрый день! Помогите, пожалуйста, с конструкцией:
Код: 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
24.12.2020, 14:06
    #40030808
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
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
24.12.2020, 14:07
    #40030810
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Обычно это означает что файл занят другим приложением.
...
Рейтинг: 0 / 0
24.12.2020, 14:08
    #40030811
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Cobalt747
Обычно это означает что файл занят другим приложением.


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


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


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

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


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

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




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

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





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


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

Давай, вываливай сюда весь код, а не кусок
...
Рейтинг: 0 / 0
24.12.2020, 14:32
    #40030827
Fresh Meat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
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
24.12.2020, 14:38
    #40030832
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Fresh Meat,

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

Такой извращенный дебаггинг у меня))
...
Рейтинг: 0 / 0
24.12.2020, 14:44
    #40030837
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
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
24.12.2020, 14:48
    #40030839
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
В результате вся твоя помойка сведётся к такому коду

Код: 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
24.12.2020, 14:57
    #40030843
Fresh Meat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..
...
Рейтинг: 0 / 0
24.12.2020, 15:08
    #40030850
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Fresh Meat
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..


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

Все заработало, ура! Большое спасибо за помощь!
...
Рейтинг: 0 / 0
24.12.2020, 15:31
    #40030869
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Жуть! Вот вы открыл файл в верхнем блоке, потом у вас вывалилось исключение, потом вы опять открываете (уже открытый файл) в 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
24.12.2020, 19:16
    #40030950
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
офф: сталкивался с такой проблемой:

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

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

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

антивирус - ЗЛО
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.12.2020, 15:58
    #40031157
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
Антивирус не зло, а источник дохода для его разработчика,
но ставить антивирусное ПО на девелоперскую машину,
действительно, довольно странно. Это для тупых юзеров
в основном (вирусы разные бывали, особенно в прошлом).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.12.2020, 16:09
    #40031161
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
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
25.12.2020, 17:18
    #40031184
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 32 при Exception
x1ca4064
Код: sql
1.
UMyLogger



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


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