powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Процесс не может получить доступ к файлу. Как обойти?
22 сообщений из 22, страница 1 из 1
Процесс не может получить доступ к файлу. Как обойти?
    #40011957
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть база SQLite для сайта. Она редактируется специальным приложением, работает на localhost и после отладки локальной версии сайта отправляется на веб-сайт по FTP.
На веб-сате тоже есть возможность редактировать данные и хочется загрузить измененную базу обратно.

Для этого надо сначала удалить существующую базу. Однако получаю ошибку:
авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом.

Коннект к базе закрыт. Пробовал на месте загрузки файла закрывать, если он открыт и потом открывать снова, если надо - не помогло.
Пробовал просто уничтожить все настройки коннекта - не помогло.
Пробовал отвязать все события, связанные с изменениями в DataSet - не помогло.

У меня есть обходное решение. Копирую базу с сервера и делаю апдейт локальной базы по ней, но это как-то не аккуратненько.

Вопросы.

Что надо обрубить, что бы снять блокировку?
Как посмотреть, какой процесс ЭТО использует?
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40011963
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставь Sysinternals Process Explorer - он по имени файла может искать процессы которые его используют и вообще еще много чего умеет. У меня уже давно всегда встроенный Windows Task Manager заменен на него.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012010
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синхронно убивать это неправильно. Лучше новую базу сохранить под новым именем типа Base{дата-время}, где-то в общих настройках указать что последняя база называется так-то, а старую периодически пытаться удалить.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012020
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dima T,
Интересный вариант, но что-то мне вещует, что не сработает. Не даст переименовать загруженную базу в нужное имя. Впрочем попробую
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012024
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в винде можно файлы переименовывать открытые файлы, с handle Файлов при этом ничего не случится. после этого на старом месте создаете новый файл и как только кто то попытается его открыть, то откроет уже новый, а не старый
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012031
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Roman Mejtes
в винде можно файлы переименовывать открытые файлы, с handle Файлов при этом ничего не случится. после этого на старом месте создаете новый файл и как только кто то попытается его открыть, то откроет уже новый, а не старый

Я в курсе. Пробовал - не прошло. Не дает файл исходный файл базы переименовать, по причине
авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012074
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012087
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Dima T,
Интересный вариант, но что-то мне вещует, что не сработает. Не даст переименовать загруженную базу в нужное имя. Впрочем попробую

Переименовывать не надо, имя каждый раз новое должно быть.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40012972
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры Павловны

Спасибо, оно. Однако увы. Решение - убивать все SQLiteConnection и SQLiteCommand сразу после использование мне кажется нерациональным в моем случае поскольку мне надо обновить только одну небольшую таблицу. В данном проекте меня особо не интересует скорость работы программы, так как действие выполняется примерно 2-3 раза в неделю
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40013018
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

всё ж апдейт данных является правильным решением

несмотря на то, что это SQLite, это настоящая БД и подходы, применимые там к эксель файликам (удалил, заменил, туда-сюда), не корректны

или полностью отконнекчиваться, закрывать все соединения, диспозить, ставить блокировку на исопльзование БД и выполнять подмену
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40013656
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
hVostt,
"В уставе только порядки писаны, а времен и случаев нет". (с) Петр 1

База размером в 200 килобайт на веб-сайте. Все изменения сайта делаются на локальном ПК и "хренак - в продакшен" на сервер, через ФТП.
Но иногда нужно по-быстрому исправить грамматическую ошибку. Это удобно сделать прямо на сайте.

Поскольку я ушел из Большого Программистского Спорта и являюсь единственным пользователем этой базы который может что-то изменять, то копирование туда-сюда вполне разумный вариант при таком размере базы.

Вот если бы размер был десяток гигабайт, то я бы сделал на сервере лог изменений, скачивал его и обновлял базу разработки.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40013696
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Однако получаю ошибку:
авторПроцесс не может получить доступ к файлу "XXXX", так как этот файл используется другим процессом.


Что надо обрубить, что бы снять блокировку?
Как посмотреть, какой процесс ЭТО использует?

Решал подобную задачу:
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.

Решил (через API).

М.б. поможет.
Хотя у тебя там база которую грохаешь так понял на другом компе, поэтому не уверен что твой случай.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014045
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77,

Это не поможет. Толку знать, что файл блокирует мое приложение?
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014404
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Толку знать, что файл блокирует мое приложение?

Ну, если твое, сделай так чтоб не блокировало.
В конце концов выгрузи это свое полностью и убей другим своим.
Проблема, это когда блокирует что-то другое.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014411
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими...
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014413
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Поскольку я ушел из Большого Программистского Спорта и являюсь единственным пользователем этой базы который может что-то изменять, то копирование туда-сюда вполне разумный вариант при таком размере базы.

Ты прогу свою можешь перезапускать? Если можешь, то заливаешь обновление под именем my_base_new.db, перезапускаешь прогу, при старте проверяешь и если есть файл my_base_new.db, то убиваешь старую базу (my_base.db) и переименовываешь этот файл в my_base.db.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Cat2,

Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими...

Я так понимаю ему неохота репликацию организовывать.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014418
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
hVostt
Cat2,

Ну как бы это всё понятно. Но SQLite это полноценная СУБД со всеми вытекающими...

Я так понимаю ему неохота репликацию организовывать.


Да он хочет файло заменить так, как будто это какой-то эксель :)
Но для этого в приложении нужно закрыть все соединения, удалить коннеккшены, задиспозить и перейти в оффлайн режим.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014420
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Dima T
пропущено...

Я так понимаю ему неохота репликацию организовывать.


Да он хочет файло заменить так, как будто это какой-то эксель :)
Но для этого в приложении нужно закрыть все соединения, удалить коннеккшены, задиспозить и перейти в оффлайн режим.

Я ему предлагал относительно простой способ замены 22221036 без разрывов соединений, но он его забраковал.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014528
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014547
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Если я правильно догадываюсь про твой кейс, то у тебя вообще изначально подход неправильный. Похоже, что тебе там требуется приложение, которое работает с серверной БД, но при этом имеет возможность регулярно работать оффлайн (случай типовой). Если это так, то тебе надо не базы копировать туда-сюда, а делать на сервере какой-нибудь сервис для синхронизации БД клиента и БД сервиса когда клиент онлайн. Был когда-то (может даже и сейчас есть) даже какой-то готовый фреймворк от MS для реализации таких сценариев.
...
Рейтинг: 0 / 0
Процесс не может получить доступ к файлу. Как обойти?
    #40014704
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, примитивная репликация: открываешь обе базы (рабочую и новую) в одном соединении и делаешь в одной транзакции для каждой таблицы
Код: sql
1.
2.
delete from Work!Table; -- Очистка рабочей таблицы
insert into Work!Table select * from New!Table; -- Вставка в рабочую из новой


Ссылочная целостность в SQLite по умолчанию отключена, если вдруг включена - отключи чтобы не мешала удалять.
Делать это можно вообще отдельной прогой.

Как понимаю база у тебя маленькая и все ее только читают, тогда если кэш побольше поставить, то эта транзакция им практически не помешает, т.к. до момента окончания транзакции все изменения в кэше будут и только при завершении транзакции произойдет монопольная блокировка чтобы изменения записать.

Единственный момент: при таком подходе не передастся изменение структуры БД, т.е. если какое поле добавишь или таблицу, то это отдельно надо обновлять рабочую базу, но обычно это не часто происходит.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Процесс не может получить доступ к файлу. Как обойти?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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