Si vous êtes intéressé par n'importe quel l'accès au fichier, plutôt que d'y écrire, FileSystemWatcher
n'aidera pas.
Une solution simple consiste à ouvrir le fichier à l'avance et à attendre que l'autre logique y accède, ce qui déclenche un IOException
. Vous pouvez utiliser la classe d'aide suivante pour rompre immédiatement - ou la fonction « Exception Première chance » 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();
}
};
}
}
Je ne l'ai pas essayé, mais c'est très probablement un génie. Je pensais à FileSystemWatcher hier, souhaitant qu'il y ait un moyen de l'accrocher. Bonne idée, va essayer. –