Si está interesado en cualquier acceso al archivo, en lugar de solo escribir en él, FileSystemWatcher
no ayudará.
Una solución simple es abrir el archivo con anticipación y esperar a que la otra lógica acceda a él, activando un IOException
. Se puede utilizar la siguiente clase de ayuda para romper de inmediato - o característica "Excepción de primera oportunidad" de VS:
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
static class DebugHelper
{
public static void BreakOnFileAccess(string path)
{
var msg = Path.GetFullPath(path);
msg = "The process cannot access the file '" + msg;
msg = msg.ToUpper();
var fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
new Thread(() => {
while (true)
{
Thread.Sleep(Timeout.Infinite);
// ensure FileStream isn't GC'd as a local variable after its last usage
GC.KeepAlive(fs);
}
}).Start();
AppDomain.CurrentDomain.FirstChanceException += (sender, e) => {
if (e.Exception is IOException &&
e.Exception.Message.ToUpper().Contains(msg))
{
Debugger.Break();
}
};
}
}
No lo he probado, pero es muy posible que sea genial. Estaba pensando en FileSystemWatcher ayer, deseando que hubiera alguna forma de conectarlo. Buena idea, lo intentaré. –