PhysicalFilesWatcher memvalidasi jalur root dan FileSystemWatcher

PhysicalFilesWatcher konstruktor sekarang memvalidasi root argumen dan hubungan antara root dan FileSystemWatcher.Path. Kombinasi tidak valid yang sebelumnya diterima saat pembuatan kini akan memunculkan pengecualian.

Versi yang diperkenalkan

.NET 11 Pratinjau 4

Perilaku sebelumnya

Sebelumnya, konstruktor PhysicalFilesWatcher menyimpan root yang diberikan tanpa validasi atau normalisasi. Sebuah null root atau root yang tidak valid karena alasan lain dapat diterima saat konstruksi dan gagal saat operasi watcher berikutnya.

Konstruktor-konstruktor tersebut juga menerima sebuah FileSystemWatcher yang Path-nya tidak kosong dan tidak terkait dengan root. Pengamat seperti itu umumnya tidak dapat melaporkan perubahan yang relevan dengan akar yang dikonfigurasi, tetapi ketidakcocokan tidak menyebabkan konstruktor melemparkan.

Misalnya, konstruksi berikut berhasil:

string root = Path.Combine(Path.GetTempPath(), "root");
string unrelatedPath = Path.Combine(Path.GetTempPath(), "unrelated");
Directory.CreateDirectory(root);
Directory.CreateDirectory(unrelatedPath);

using var fileSystemWatcher = new FileSystemWatcher(unrelatedPath);
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Perilaku baru

Mulai dari .NET 11, konstruktor PhysicalFilesWatcher menormalkan root dengan memanggil Path.GetFullPath() dan menolak input yang tidak valid saat konstruksi:

  • Jika root adalah null, konstruktor melempar ArgumentNullException.
  • Jika root tidak dapat dikonversi ke jalur lengkap, konstruktor menyebarluaskan pengecualian yang berlaku dari Path.GetFullPath().
  • Jika FileSystemWatcher.Path tidak kosong dan tidak terkait dengan root, konstruktor akan melemparkan ArgumentException.

FileSystemWatcher.Path valid ketika kosong, sama dengan root, leluhur dari root, atau turunan dari root. Dalam contoh sebelumnya, konstruksi sekarang melemparkan ArgumentException karena unrelatedPath bukan leluhur maupun keturunan dari root.

Direktori akar yang belum ada tetap valid. Pemantauan file ditunda hingga direktori root dibuat.

Jenis perubahan yang memutus kompatibilitas

Perubahan ini adalah perubahan perilaku.

Alasan perubahan

PhysicalFilesWatcher sekarang mendukung direktori root yang belum ada saat watcher dibuat. Ini memerlukan normalisasi akar kata dan pengoordinasian FileSystemWatcher yang disediakan dengan akar kata tersebut.

FileSystemWatcher yang memantau direktori yang tidak terkait tidak dapat secara andal memberikan notifikasi untuk direktori root yang dikonfigurasi. Menolak kombinasi yang tidak valid ini saat konstruksi mencegah watcher dibuat dalam konfigurasi yang pada umumnya tidak berfungsi. Validasi jalur akar juga menyebabkan jalur yang tidak valid langsung gagal, alih-alih saat operasi watcher berikutnya. Untuk informasi selengkapnya, lihat dotnet/runtime#126411.

Berikan jalur yang tidak null dan valid sebagai root.

Ketika Anda menyediakan FileSystemWatcher dengan Path yang tidak kosong, konfigurasikan jalurnya agar sama dengan, menjadi induk dari, atau menjadi turunan dari root. Contohnya:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Jika direktori akar masih belum ada, FileSystemWatcher.Path kosong dianggap valid:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Pengamat mulai memantau setelah direktori akar dibuat.

API yang Terpengaruh