|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть консольная программа, которая постоянно проверяет сетевой каталог на предмет появления в нем новых файлов и записывает ссылки на них в БД. Ниже упрощенный код этого алгоритма. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Через какое-то время (через несколько дней) в лог-файле начинают появляться ошибки: 12.01.2022 9:11:43: EFOpenError: Cannot open file "\\Server\Файлы\1.pdf". Недостаточно системных ресурсов для завершения операции 12.01.2022 9:12:43: EFOpenError: Cannot open file "\\Server\Файлы\1.pdf". Недостаточно системных ресурсов для завершения операции 12.01.2022 9:13:43: EFOpenError: Cannot open file "\\Server\Файлы\2.pdf". Указанный сервер не может выполнить требуемую операцию 12.01.2022 9:14:47: EFOpenError: Cannot open file "\\Server\Файлы\1.pdf". Указанный сервер не может выполнить требуемую операцию 12.01.2022 9:15:47: EFOpenError: Cannot open file "\\Server\Файлы\1.pdf". Указанный сервер не может выполнить требуемую операцию <и дальше постоянные ошибки "Указанный сервер не может выполнить требуемую операцию"> После перезапуска программы, все начинает работать нормально. На несколько дней. Подскажите, пожалуйста. Где может быть ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:00 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
shmelinaГде может быть ошибка? В самом алгоритме её работы. ReadDirectoryChangesW тебе в руки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:04 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
shmelina, может быть дело в том, что на компьютере, к которому подключаетесь по сети, не серверная Windows. Сталкивался с такой проблемой, вот тут ссылка на решение пропадает доступ к компьютеру с Windows 7 Не создает ли ваша программа много сетевых подключений в ходе работы? Причина ошибки по ссылке, если я правильно понимаю, как раз из-за того, что для не серверной ОС с настройками по-умолчанию, когда много подключений, такое может быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:09 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
FindClose должен быть всегда, независимо от результата FindFirst. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:17 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Возможно это из-за попытки схватить еще не дописанный файл ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:17 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
DHDD FindClose должен быть всегда, независимо от результата FindFirst. s62 Причина ошибки по ссылке, если я правильно понимаю, как раз из-за того, что для не серверной ОС с настройками по-умолчанию, когда много подключений, такое может быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:20 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
DHDDFindClose должен быть всегда, независимо от результата FindFirst. Это надо смотреть в коде конкретной RTL. В некоторых версиях это наоборот приводило к утечке хэндлов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:42 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
shmelina, А зачем каждый раз устанавливать текущий каталог в цикле да еще с интервалом 3 сек? Код: pascal 1. 2. 3. 4. 5. 6. 7.
А файлики по-видимому все-таки открываются, т.к. "Cannot open file "\\Server\Файлы\1.pdf"", а не только проверяется SR.Name и SR.TimeStamp. И видимо не все файлы закрываются внутри repeat...until ; А еще я бы переписал код вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
Чтобы гарантировать закрытие ресурса при исключении. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:46 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
s62 не серверная Windows Жду, когда админ даст права логи там посмотреть. Эту ошибку ведь сетевой компьютер выдает? Не локальный? DHDD FindClose должен быть всегда, независимо от результата FindFirst. Встречал на этом форуме как раз обратное мнение. Да и пример в справке об этом говорит. L_argo Возможно это из-за попытки схватить еще не дописанный файл ? Ошибка повторяется постоянно. Файл бы давно дописался. И если не закрывать программу и попробовать открывать файл по сети из той же сессии, что и программа, то он открывается. s62 Скорее наверное, когда много файлов открыто или что-то типа такого. Файлы не открываются. Они перебираются в цикле и ссылки на новые пишутся в БД. Dimitry Sibiryakov ReadDirectoryChangesW тебе в руки. Спасибо, поизучаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:48 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Belotsky Serge А зачем каждый раз устанавливать текущий каталог в цикле да еще с интервалом 3 сек? Это часть кода. Сканируются разные каталоги по этому перед каждым циклом устанавливается свой текущий каталог. Belotsky Serge А файлики по-видимому все-таки открываются Точно не открываются. Возможно такая ошибка возникает в FindFirst или в FindNext. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:52 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
shmelinaСканируются разные каталоги по этому перед каждым циклом устанавливается свой текущий каталог. Для сканирования каталога его необязательно делать текущим. Достаточно указать в качестве параметра FindFirst. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:56 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Belotsky Serge А еще я бы переписал код вот так Наверно вы правы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 15:57 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Для сканирования каталога его необязательно делать текущим. Достаточно указать в качестве параметра FindFirst. Первым параметром, где "*.pdf"? \\Server\Файлы\*.pdf Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 16:00 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
shmelina Belotsky Serge А зачем каждый раз устанавливать текущий каталог в цикле да еще с интервалом 3 сек? Это часть кода. Сканируются разные каталоги по этому перед каждым циклом устанавливается свой текущий каталог. Belotsky Serge А файлики по-видимому все-таки открываются Точно не открываются. Возможно такая ошибка возникает в FindFirst или в FindNext. Сомневаюсь, у меня FindFirst и FindNext крутится месяцами. И ничего не падает. Но есть современная альтернатива: System.IOUtils.TDirectory , посмотрите метод TDirectory.GetFiles . Это статический метод и он возвращает только имена файлов без TimeStamp. Не забудьте только почистить то что он возвращает и обязательно в блоке try...finally...end. Ну и напоследок, если файл может внезапно исчезнуть, после FindFirst в блоке repeat ... until пока вы обрабатываете или "отвалиться" сетевая папка то могут быть проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 16:12 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
s62 DHDD FindClose должен быть всегда, независимо от результата FindFirst. Посмотрел описание функции , Search handle открывается при успешном завершении функции и тогда его потом надо закрыть функцией FindClose. Если произошла какая-то ошибка или просто подходящий файл не найден, то возвратится INVALID_HANDLE_VALUE и соответственно, закрывать хэндл потом не надо. MSIf the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose, and the lpFindFileData parameter contains information about the first file or directory found. If the function fails or fails to locate files from the search string in the lpFileName parameter, the return value is INVALID_HANDLE_VALUE and the contents of lpFindFileData are indeterminate. To get extended error information, call the GetLastError function. If the function fails because no matching files can be found, the GetLastError function returns ERROR_FILE_NOT_FOUND. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 16:22 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
FindFirst и FindFirstFile, хотя и похожи по названию, работают сильно иначе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 16:58 |
|
Недостаточно системных ресурсов для завершения операции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov FindFirst и FindFirstFile, хотя и похожи по названию, работают сильно иначе. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
И соответственно, в таком случае и FindClose ничего не делает: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2022, 17:04 |
|
|
start [/forum/topic.php?fid=58&msg=40126624&tid=2036714]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 166ms |
0 / 0 |