Я использую стороннюю библиотеку в своем консольном приложении .NET Core. Библиотека создает текстовый файл, и библиотека держит файл заблокированным (возможно, статический экземпляр хранится где-то внутри библиотеки) до завершения процесса.
Мне нужно обработать заблокированный файл после того, как я вызову функции сторонней библиотеки. Конечно, в настоящее время я не могу этого сделать из-за печально известного исключения «Файл используется другим процессом» (в моем случае это фактически тот же процесс).
Какой самый простой и безопасный способ получить доступ к заблокированному файлу из того же консольного приложения?
К счастью, я точно знаю, что не будет запущенных параллельных потоков и другого доступа к этому файлу — как только библиотека закончит писать, это будет сделано, хотя файл останется заблокированным. Таким образом, я мог бы безопасно делать с файлом все, что захочу, если бы только я мог «сломать блокировку» или изобрести какой-нибудь трюк, чтобы выгрузить эту стороннюю библиотеку и снять блокировку.
FileShare.ReadWrite
получил меня на полпути - я мог прочитать содержимое, но когда я попытался записать его обратно, я получил исключениеStream is not writable
. Итак, я предполагаю, что библиотека заблокировала файл для записи. - person JustAMartin   schedule 01.09.2019ServiceCollection
. Я пытался убедиться, что мой экземпляр ServiceCollection обнуляется и выходит за рамки при попытке записи в файл, но все равно это не помогло — скорее всего, есть какие-то перекрестные ссылки. - person JustAMartin   schedule 01.09.2019myscope.ServiceProvider.RequiredService<T>
и вызвать процесс. После этого утилизируйте область действия. - person Frank Nielsen   schedule 01.09.2019GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();
после удаления области. Я предполагаю, что некоторые ссылки все еще застряли, и только принудительная сборка мусора избавилась от них и, наконец, закрыла дескриптор файла. - person JustAMartin   schedule 01.09.2019