Отладка проблем с обработкой файлов в c # /. NET - PullRequest
6 голосов
/ 20 января 2012

У меня есть программа, которая в свою очередь обращается к DLL.Он использует файлы различными способами, создавая их, копируя и устанавливая их как вложения в объект emailMessage.У меня ошибка «файл используется», предотвращающий перезапись файла.

Существует ли какой-либо инструмент или метод для облегчения процесса - например, какое-то предупреждение о создании / удалении ручек, содержащих определенную строку?Я посмотрел на Process Explorer, Process Monitor (преемник filemon) и т. Д., Но не повезло.

Я могу продолжать охоту, но подумал, что может быть лучший подход, чем продолжение моих неформальных исследований с помощью кода.

РЕДАКТИРОВАТЬ

Спасибо за комментарии.Что касается вопросов, структура немного сложна.У меня есть мое «клиентское» приложение, которое ссылается на dll «Engine» (также в C #).Оба мои.Клиент создает экземпляры «вложений», каждое из которых содержит ссылку на файл для различных файлов.Конструктор этого захватывает указанный файл и помещает копию во временную папку.Позже, набор «действий» создает электронную почту - он добавляет каждое вложение как «реальное» вложение к объекту EmailMessage.В разное время я избавляюсь от объектов и устанавливаю их ссылки на null, но если я делаю это слишком рано, я получаю исключения с нулевыми ссылками.Если я сделаю это слишком поздно, чертовы вещи будут в использовании!Я уверен, что смогу выследить эту конкретную ошибку в свое время, но это заставило меня задуматься, есть ли полезный стандартный метод, используемый теми, кто в курсе.:)

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Procmon сообщит вам, кто (то есть, какой процесс) открывает файл, и (неуправляемый) стек места, в котором он был открыт.

Обычная причина этой проблемы в C # /. NET - люди, открывающие файловые потоки, а не утилизирующие, когда они закончили с ними. Это означает, что файл остается открытым до (по крайней мере) следующей сборки мусора, которая может быть устаревшей.

2 голосов
/ 20 января 2012

Звучит так, будто вы ищете инструмент, позволяющий узнать, что блокирует файл во время отладки.Если это так, вы можете использовать Unlocker для определения процесса блокировки файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...