powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка "I/O error 103" при выполнении CloseFile из-под службы
25 сообщений из 39, страница 1 из 2
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031253
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Создаю текстовый файл на диске.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var f: TextFile;
begin
  {$I-}
  AssignFile(f, 'C:\Temp\1.txt', CP_UTF8);
  Rewrite(f);
  Writeln(f, 'Строка1');
  Writeln(f, 'Строка2');
  CloseFile(f);  // здесь ошибка "I/O error 103"
  {$I+}
end;


Самое интересное то, что:
1) из под обычного приложения работает как надо - пишет в файл, всё корректно.
2) из под службы вылетает на CloseFile(f); с исключением "I/O error 103", но при этом всё равно фиксирует изменения на диске и файл записывается нормальный.

Почему же возникает исключение "I/O error 103" ?
Эта же ошибка будет если просто вызвать CloseFile(f) без его предварительного открытия, ну это понятно.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031255
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Код: pascal
1.
Rewrite(f);


Файл существует ко времени старта службы?
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031258
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, файла не должно быть.
А что это имеет значение? Rewrite должна пересоздать его в любом случае.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031261
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Нет, файла не должно быть.
А что это имеет значение? Rewrite должна пересоздать его в любом случае.

Разница в правах между службой и пользователем.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031262
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Служба запускается под "NT AUTHORITY\LocalSystem"
Почему же возникает исключение "I/O error 103" ?
Файл то при этом записывается нормально, если задавить исключение.
Код: pascal
1.
2.
3.
4.
try
  CloseFile(f);
except
end;
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031280
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Почему же возникает исключение "I/O error 103" ?

Потому что код, который ты показываешь - туфта и такого исключения выкидывать не может по
причине отключенных проверок. По той же причине ошибка способна возникать где угодно,
сохраняясь через все вызовы. Наиболее вероятная причина - у тебя опечатка в имени переменной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031348
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никаких MessageBox мой код конечно не выдает, но исключение "I/O error 103" на CloseFile(f) из под службы вызывает наверное потому, что после вызова AssignFile IOResult=103
Странно, что после повторного вызова AssignFile IOResult=0 и тогда после всех writeln, на вызове CloseFile(f) всё проходит гладко. Такое впечатление, что исключение "I/O error 103" при выполнении CloseFile относится не к CloseFile, а к AssignFile

Что делать? Поставить 2 раза вызов AssignFile?
Код: pascal
1.
2.
3.
  {$I-}
  AssignFile(f, 'C:\Temp\1.txt', CP_UTF8);
  AssignFile(f, 'C:\Temp\1.txt', CP_UTF8);
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031360
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я разобрался, почему на CloseFile(f) возникало исключение "I/O error 103". Оказалось, что я сделал вызов Log (моя ф-ция для вывода инфы в другой txt-файл), а у меня внутри этой Log тоже делаются свои {$I-} и {$I+} и т.о, после выхода из той ф-ции включено {$I+} и далее может возникнуть Exception. Ладно, с этим разобрался.

Но остается непонятно , почему на AssignFile, Rewrite, Reset или CloseFile иногда возникает IOResult=103 ("I/O error 103"). Наверное могут возникать и другие коды IOResult. Теоретически, что-то может блокировать файл (например, антивирусник).

Пока нашел решение такое : перед AssignFile отключить генерацию исключений с помощью директивы {$I-} и самому контролировать каждую операцию, проверяя IOResult, а в конце {$I+}. Самое лучшее - каждую операцию AssignFile, Rewrite, Reset и CloseFile обернуть в цикл, например, 1 до N попыток. Практика показала, что при 1-й попытке может быть ошибка, а при 2-й попытке все ОК.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031374
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Теоретически, что-то может блокировать файл (например, антивирусник)

Для кодера у тебя слишком буйная фантазия, с ней в архитекторы надо.

Выключи воображение и выясни как на самом деле работает твоя программа, проверяя IOResult
после каждого вызова каждой функции в блоке с отключенной автоматической проверкой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031390
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
внутри этой Log тоже делаются свои {$I-} и {$I+} и т.о, после выхода из той ф-ции включено {$I+} и далее может возникнуть Exception


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
{$IFOPT I+}
  {$DEFINE I_PLUS}
  {$I-}
{$ENDIF}

  // some code here

{$IFDEF I_PLUS}
  {$I+}
  {$UNDEF I_PLUS}
{$ENDIF}
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031408
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

а тебя не смутил факт, что это опция компилятора и на вложенные вызовы она не
распространяется, а аффтар просто бредит?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031410
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Я разобрался, почему на CloseFile(f) возникало исключение "I/O error 103". Оказалось, что я сделал вызов Log (моя ф-ция для вывода инфы в другой txt-файл), а у меня внутри этой Log тоже делаются свои {$I-} и {$I+} и т.о, после выхода из той ф-ции включено {$I+} и далее может возникнуть Exception. Ладно, с этим разобрался.

Директивы так не работают. Разбирайся дальше.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031411
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
а аффтар просто бредит?..

Удваиваю.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031433
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Polesov,

а тебя не смутил факт, что это опция компилятора и на вложенные вызовы она не
распространяется, а аффтар просто бредит?..

Да, действительно.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031756
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор,

1. Удалите нафиг все ваши директивы
2. Научитесь пользоваться исключениями
3. Все CloseFile занесите в блок finally

После этого приходите с новым кодом, текстом ошибки и строкой на которой она возникает
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031764
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
28.12.2020 13:09, _Vasilisk_ пишет:
> 1. Удалите нафиг все ваши директивы
> 2. Научитесь пользоваться исключениями

+1

IOResult - "тяжелые пережитки тёмного прошлого" (С)
ещё со времён TurboPascal'я
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40031770
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рассказать ТС про исключения или рано еще?
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032421
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Автор,

1. Удалите нафиг все ваши директивы
2. Научитесь пользоваться исключениями
3. Все CloseFile занесите в блок finally
После этого приходите с новым кодом, текстом ошибки и строкой на которой она возникает

Большое спасибо за совет! Я тоже подозревал, что эти директивы - какой-то пережиток прошлого и с радостью избавился от них и сделал корректный отлов исключений. Получилось всё намного красивее и работает.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032445
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Большое спасибо за совет! Я тоже подозревал, что эти директивы - какой-то пережиток прошлого

Ну, как бы, AssignFile, CloseFile и т.п. - это такой же пережиток прошлого, как и IOResult...
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032446
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Ну, как бы, AssignFile, CloseFile и т.п. - это такой же пережиток прошлого, как и IOResult...

А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi?
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032459
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
alekcvp
Ну, как бы, AssignFile, CloseFile и т.п. - это такой же пережиток прошлого, как и IOResult...

А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi?

Delphi предлагает модули Windows.pas и Classes.pas.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032463
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Delphi предлагает модули Windows.pas и Classes.pas.

Расскажи о них подробнее, пожалуйста.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032475
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
alekcvp
Ну, как бы, AssignFile, CloseFile и т.п. - это такой же пережиток прошлого, как и IOResult...

А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi?


Для начала надо определиться: чтения или всё-таки записи? Логи - это вроде как про запись, да и у ТСа в коде я команд ReadLn не наблюдаю.

Далее чтение файлов построчно - это какой-то не очень правильный подход, как по мне. Не лучше ли будет прочитать сразу весь файл через TStringList (если файл маленький) или работать через MMF/T(File|Memory)Stream (если большой)?

P.S: AssignFile и компания вообще умеют выдавать понятные ошибки доступа, как, например, это делает CreateFile?..Или каждый раз надо гадать что за загадочная IO Error вылезла на этот раз?
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032484
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Для начала надо определиться: чтения или всё-таки записи? Логи - это вроде как про запись, да и у ТСа в коде я команд ReadLn не наблюдаю.

Ну так эти функции используются не только для записи, верно?

alekcvp
Далее чтение файлов построчно - это какой-то не очень правильный подход, как по мне. Не лучше ли будет прочитать сразу весь файл через TStringList (если файл маленький) или работать через MMF/T(File|Memory)Stream (если большой)?

Если использовать MMF или стрим, то придётся самому проделать ровно ту работу, которая уже сделана в системных функциях, с непонятными бенефитами в результате.

alekcvp
P.S: AssignFile и компания вообще умеют выдавать понятные ошибки доступа, как, например, это делает CreateFile?..Или каждый раз надо гадать что за загадочная IO Error вылезла на этот раз?

Есть список: http://docwiki.embarcadero.com/RADStudio/Sydney/en/Input-Output_Errors он правда не полный (есть ещё 131, 107). Если ни один из этих кодов, значит код системной ошибки. В любом случае, гадать не нужно, есть GetLastError.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032494
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
alekcvp
Ну, как бы, AssignFile, CloseFile и т.п. - это такой же пережиток прошлого, как и IOResult...

А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi?

Вот и я тоже хотел спросить, чем можно заменить последовательное по-строчное чтение из большого текстового файла?
Сразу скажу, что TStringList.LoadFromFile не предлагать, т.к. есть риск сожрать всю память и получить "Out of Memory". Надо именно последовательно считывать текст, по-строчно!
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка "I/O error 103" при выполнении CloseFile из-под службы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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