|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Есть база SQLite для сайта. Она редактируется специальным приложением, работает на localhost и после отладки локальной версии сайта отправляется на веб-сайт по FTP. На веб-сате тоже есть возможность редактировать данные и хочется загрузить измененную базу обратно. Для этого надо сначала удалить существующую базу. Однако получаю ошибку: авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом. Коннект к базе закрыт. Пробовал на месте загрузки файла закрывать, если он открыт и потом открывать снова, если надо - не помогло. Пробовал просто уничтожить все настройки коннекта - не помогло. Пробовал отвязать все события, связанные с изменениями в DataSet - не помогло. У меня есть обходное решение. Копирую базу с сервера и делаю апдейт локальной базы по ней, но это как-то не аккуратненько. Вопросы. Что надо обрубить, что бы снять блокировку? Как посмотреть, какой процесс ЭТО использует? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:34 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Поставь Sysinternals Process Explorer - он по имени файла может искать процессы которые его используют и вообще еще много чего умеет. У меня уже давно всегда встроенный Windows Task Manager заменен на него. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:44 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Синхронно убивать это неправильно. Лучше новую базу сохранить под новым именем типа Base{дата-время}, где-то в общих настройках указать что последняя база называется так-то, а старую периодически пытаться удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 20:08 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Dima T, Интересный вариант, но что-то мне вещует, что не сработает. Не даст переименовать загруженную базу в нужное имя. Впрочем попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 21:12 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
в винде можно файлы переименовывать открытые файлы, с handle Файлов при этом ничего не случится. после этого на старом месте создаете новый файл и как только кто то попытается его открыть, то откроет уже новый, а не старый ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 21:23 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Roman Mejtes в винде можно файлы переименовывать открытые файлы, с handle Файлов при этом ничего не случится. после этого на старом месте создаете новый файл и как только кто то попытается его открыть, то откроет уже новый, а не старый Я в курсе. Пробовал - не прошло. Не дает файл исходный файл базы переименовать, по причине авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 22:11 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 03:20 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2 Dima T, Интересный вариант, но что-то мне вещует, что не сработает. Не даст переименовать загруженную базу в нужное имя. Впрочем попробую Переименовывать не надо, имя каждый раз новое должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 07:28 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Спасибо, оно. Однако увы. Решение - убивать все SQLiteConnection и SQLiteCommand сразу после использование мне кажется нерациональным в моем случае поскольку мне надо обновить только одну небольшую таблицу. В данном проекте меня особо не интересует скорость работы программы, так как действие выполняется примерно 2-3 раза в неделю ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 10:53 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2, всё ж апдейт данных является правильным решением несмотря на то, что это SQLite, это настоящая БД и подходы, применимые там к эксель файликам (удалил, заменил, туда-сюда), не корректны или полностью отконнекчиваться, закрывать все соединения, диспозить, ставить блокировку на исопльзование БД и выполнять подмену ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 13:22 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
hVostt, "В уставе только порядки писаны, а времен и случаев нет". (с) Петр 1 База размером в 200 килобайт на веб-сайте. Все изменения сайта делаются на локальном ПК и "хренак - в продакшен" на сервер, через ФТП. Но иногда нужно по-быстрому исправить грамматическую ошибку. Это удобно сделать прямо на сайте. Поскольку я ушел из Большого Программистского Спорта и являюсь единственным пользователем этой базы который может что-то изменять, то копирование туда-сюда вполне разумный вариант при таком размере базы. Вот если бы размер был десяток гигабайт, то я бы сделал на сервере лог изменений, скачивал его и обновлял базу разработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2020, 10:32 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2 Однако получаю ошибку: авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом. Что надо обрубить, что бы снять блокировку? Как посмотреть, какой процесс ЭТО использует? Решал подобную задачу: Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс. Решил (через API). М.б. поможет. Хотя у тебя там база которую грохаешь так понял на другом компе, поэтому не уверен что твой случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2020, 14:20 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Дмитрий77, Это не поможет. Толку знать, что файл блокирует мое приложение? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 21:50 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2 Толку знать, что файл блокирует мое приложение? Ну, если твое, сделай так чтоб не блокировало. В конце концов выгрузи это свое полностью и убей другим своим. Проблема, это когда блокирует что-то другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 15:59 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2, Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 16:07 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2 Поскольку я ушел из Большого Программистского Спорта и являюсь единственным пользователем этой базы который может что-то изменять, то копирование туда-сюда вполне разумный вариант при таком размере базы. Ты прогу свою можешь перезапускать? Если можешь, то заливаешь обновление под именем my_base_new.db, перезапускаешь прогу, при старте проверяешь и если есть файл my_base_new.db, то убиваешь старую базу (my_base.db) и переименовываешь этот файл в my_base.db. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 16:14 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
hVostt Cat2, Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими... Я так понимаю ему неохота репликацию организовывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 16:16 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Dima T hVostt Cat2, Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими... Я так понимаю ему неохота репликацию организовывать. Да он хочет файло заменить так, как будто это какой-то эксель :) Но для этого в приложении нужно закрыть все соединения, удалить коннеккшены, задиспозить и перейти в оффлайн режим. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 16:18 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
hVostt Dima T пропущено... Я так понимаю ему неохота репликацию организовывать. Да он хочет файло заменить так, как будто это какой-то эксель :) Но для этого в приложении нужно закрыть все соединения, удалить коннеккшены, задиспозить и перейти в оффлайн режим. Я ему предлагал относительно простой способ замены 22221036 без разрывов соединений, но он его забраковал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 16:22 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 18:51 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Cat2, Если я правильно догадываюсь про твой кейс, то у тебя вообще изначально подход неправильный. Похоже, что тебе там требуется приложение, которое работает с серверной БД, но при этом имеет возможность регулярно работать оффлайн (случай типовой). Если это так, то тебе надо не базы копировать туда-сюда, а делать на сервере какой-нибудь сервис для синхронизации БД клиента и БД сервиса когда клиент онлайн. Был когда-то (может даже и сейчас есть) даже какой-то готовый фреймворк от MS для реализации таких сценариев. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 19:32 |
|
Процесс не может получить доступ к файлу. Как обойти?
|
|||
---|---|---|---|
#18+
Как вариант, примитивная репликация: открываешь обе базы (рабочую и новую) в одном соединении и делаешь в одной транзакции для каждой таблицы Код: sql 1. 2.
Ссылочная целостность в SQLite по умолчанию отключена, если вдруг включена - отключи чтобы не мешала удалять. Делать это можно вообще отдельной прогой. Как понимаю база у тебя маленькая и все ее только читают, тогда если кэш побольше поставить, то эта транзакция им практически не помешает, т.к. до момента окончания транзакции все изменения в кэше будут и только при завершении транзакции произойдет монопольная блокировка чтобы изменения записать. Единственный момент: при таком подходе не передастся изменение структуры БД, т.е. если какое поле добавишь или таблицу, то это отдельно надо обновлять рабочую базу, но обычно это не часто происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 08:02 |
|
|
start [/forum/topic.php?fid=20&fpage=7&tid=1398439]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 282ms |
total: | 420ms |
0 / 0 |