Есть ли способ обойти или удалить блокировку файла, удерживаемую другим потоком, не убивая поток?Можно ли обойти блокировку файлов в C#, когда другой поток/процесс имеет необходимость использовать эксклюзивную блокировку?
Я использую стороннюю библиотеку в своем приложении, которая выполняет только для чтения операции над файлом. Мне нужно, чтобы второй поток читал файл в то же время, чтобы извлечь лишние данные, которые сторонняя библиотека не раскрывает. К сожалению, сторонняя библиотека открыла файл, используя блокировку чтения/записи, и поэтому я получаю обычный «Процесс не может получить доступ к файлу ... потому что он используется другим процессом».
Я хотел бы избежать предварительной загрузки всего файла моим потоком, потому что файл большой и может вызвать нежелательные задержки при загрузке этого файла и избыточном использовании памяти. Копирование файла нецелесообразно из-за размера файлов. Во время нормальной работы два потока, попадающих в один и тот же файл, не будут вызывать каких-либо серьезных проблем с конкуренцией/производительностью. Мне не нужна идеальная синхронизация времени между двумя потоками, но они должны читать одни и те же данные за полсекунды друг друга.
Я не могу изменить стороннюю библиотеку.
Есть ли проблемы с этой проблемой?
Замок - это замок - если бы это было, это не было бы блокировкой ... –
И, как и многие замки, некоторые разработчики библиотеки не понимают, что меньше. :-) Я также был бы доволен умной работой. –
Длинный снимок: можете ли вы открыть этот файл в качестве общей _before_ вашей сторонней библиотеки? Возможно, они внедрили некоторый резервный механизм. –