Итак, чтобы напомнить, что я проанализировал из вашего кода:
- Вы читаете список файлов из SQL таблицы
- Вы инициализируете FileSystemWatcher в каталоге каждого файла с фильтром по имени каждого файла
- Вы связываете все прослушиватели событий всех наблюдателей с одинаковыми обработчиками
- В обработчике, где вы получаете только полный путь к файлу, который вы ' Если вас предупреждают, вы хотите знать «id» (т. е. первичный ключ таблицы) для данного пути
Итак, просто держите словарь с данными вместо двух списков или одна переменная c переменная?
// Class-level field
private static Dictionary<string, int> fileList = new Dictionary<string, int>();
// Then while reading the data:
while (myreader.Read())
{
// Use path as a key to the id, so you can use the path later to look up the key
fileList[myreader[1].ToString()] = myreader.GetInt32(0);
}
foreach(var nw in fileList)
{
// ...
}
А потом в вашем обработчике событий:
private static void directoryChange(object source, System.IO.FileSystemEventArgs e)
{
if (e.ChangeType == System.IO.WatcherChangeTypes.Deleted)
{
if (fileList.TryGetValue(e.FullPath, out var id))
{
Console.WriteLine(id);
}
else
{
Console.WriteLine($"Path '{e.FullPath}' not present in dictionary?");
}
}
}