FileSystemWatcher Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendengarkan pemberitahuan perubahan sistem file dan menaikkan peristiwa saat direktori, atau file dalam direktori, berubah.
public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
type FileSystemWatcher = class
interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
- Warisan
- Warisan
-
FileSystemWatcher
- Atribut
- Penerapan
Contoh
Contoh berikut membuat FileSystemWatcher untuk menonton direktori yang ditentukan pada waktu proses. Komponen diatur untuk mengawasi perubahan dan LastWriteLastAccess waktu, pembuatan, penghapusan, atau penggantian nama file teks di direktori. Jika file diubah, dibuat, atau dihapus, jalur ke file akan dicetak ke konsol. Saat file diganti namanya, jalur lama dan baru dicetak ke konsol.
using System;
using System.IO;
namespace MyNamespace
{
class MyClassCS
{
static void Main()
{
using var watcher = new FileSystemWatcher(@"C:\path\to\folder");
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.Filter = "*.txt";
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (e.ChangeType != WatcherChangeTypes.Changed)
{
return;
}
Console.WriteLine($"Changed: {e.FullPath}");
}
private static void OnCreated(object sender, FileSystemEventArgs e)
{
string value = $"Created: {e.FullPath}";
Console.WriteLine(value);
}
private static void OnDeleted(object sender, FileSystemEventArgs e) =>
Console.WriteLine($"Deleted: {e.FullPath}");
private static void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"Renamed:");
Console.WriteLine($" Old: {e.OldFullPath}");
Console.WriteLine($" New: {e.FullPath}");
}
private static void OnError(object sender, ErrorEventArgs e) =>
PrintException(e.GetException());
private static void PrintException(Exception? ex)
{
if (ex != null)
{
Console.WriteLine($"Message: {ex.Message}");
Console.WriteLine("Stacktrace:");
Console.WriteLine(ex.StackTrace);
Console.WriteLine();
PrintException(ex.InnerException);
}
}
}
}
Imports System.IO
Namespace MyNamespace
Class MyClassVB
Shared Sub Main()
Using watcher = New FileSystemWatcher("C:\path\to\folder")
watcher.NotifyFilter = NotifyFilters.Attributes Or
NotifyFilters.CreationTime Or
NotifyFilters.DirectoryName Or
NotifyFilters.FileName Or
NotifyFilters.LastAccess Or
NotifyFilters.LastWrite Or
NotifyFilters.Security Or
NotifyFilters.Size
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Created, AddressOf OnCreated
AddHandler watcher.Deleted, AddressOf OnDeleted
AddHandler watcher.Renamed, AddressOf OnRenamed
AddHandler watcher.Error, AddressOf OnError
watcher.Filter = "*.txt"
watcher.IncludeSubdirectories = True
watcher.EnableRaisingEvents = True
Console.WriteLine("Press enter to exit.")
Console.ReadLine()
End Using
End Sub
Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
If e.ChangeType <> WatcherChangeTypes.Changed Then
Return
End If
Console.WriteLine($"Changed: {e.FullPath}")
End Sub
Private Shared Sub OnCreated(sender As Object, e As FileSystemEventArgs)
Dim value As String = $"Created: {e.FullPath}"
Console.WriteLine(value)
End Sub
Private Shared Sub OnDeleted(sender As Object, e As FileSystemEventArgs)
Console.WriteLine($"Deleted: {e.FullPath}")
End Sub
Private Shared Sub OnRenamed(sender As Object, e As RenamedEventArgs)
Console.WriteLine($"Renamed:")
Console.WriteLine($" Old: {e.OldFullPath}")
Console.WriteLine($" New: {e.FullPath}")
End Sub
Private Shared Sub OnError(sender As Object, e As ErrorEventArgs)
PrintException(e.GetException())
End Sub
Private Shared Sub PrintException(ex As Exception)
If ex IsNot Nothing Then
Console.WriteLine($"Message: {ex.Message}")
Console.WriteLine("Stacktrace:")
Console.WriteLine(ex.StackTrace)
Console.WriteLine()
PrintException(ex.InnerException)
End If
End Sub
End Class
End Namespace
Keterangan
Gunakan FileSystemWatcher untuk melihat perubahan dalam direktori tertentu. Anda dapat melihat perubahan dalam file dan subdirektori direktori yang ditentukan. Anda dapat membuat komponen untuk menonton file di komputer lokal, drive jaringan, atau komputer jarak jauh.
Untuk mengawasi perubahan di semua file, atur Filter properti ke string kosong ("") atau gunakan kartubebas ("*.*"). Untuk menonton file tertentu, atur Filter properti ke nama file. Misalnya, untuk melihat perubahan dalam file MyDoc.txt, atur Filter properti ke "MyDoc.txt". Anda juga dapat melihat perubahan dalam jenis file tertentu. Misalnya, untuk melihat perubahan dalam file teks, atur properti ke Filter"*.txt".
Ada beberapa jenis perubahan yang dapat Anda tonton dalam direktori atau file. Misalnya, Anda dapat melihat perubahan dalam Attributes, LastWrite tanggal dan waktu, atau Size file atau direktori. Ini dilakukan dengan mengatur properti NotifyFilter ke salah satu nilai NotifyFilters. Untuk informasi selengkapnya tentang jenis perubahan yang dapat Anda tonton, lihat NotifyFilters.
Anda dapat memantau penggantian nama, penghapusan, atau pembuatan file atau direktori. Misalnya, untuk mengawasi penggantian nama file teks, atur properti Filter ke nilai "*.txt" dan panggil metode WaitForChanged dengan parameter yang ditentukan Renamed.
Sistem operasi Windows memberi tahu komponen Anda tentang perubahan pada file dalam buffer yang dibuat oleh FileSystemWatcher. Jika ada banyak perubahan dalam waktu singkat, buffer dapat meluap. Hal ini menyebabkan komponen kehilangan jejak perubahan dalam direktori, dan hanya akan memberikan pemberitahuan umum. Meningkatkan ukuran buffer dengan properti InternalBufferSize membutuhkan banyak sumber daya, karena menggunakan memori yang tidak dapat dipertukarkan ke disk. Oleh karena itu, pastikan buffer tetap sekecil mungkin namun cukup besar untuk tidak melewatkan peristiwa perubahan file apa pun. Untuk menghindari luapan buffer, gunakan NotifyFilter properti dan IncludeSubdirectories sehingga Anda dapat memfilter pemberitahuan perubahan yang tidak diinginkan.
Untuk daftar nilai properti awal untuk instans FileSystemWatcher, periksa konstruktor FileSystemWatcher.
Pertimbangkan fakta berikut saat Anda menggunakan FileSystemWatcher kelas :
- File tersembunyi tidak diabaikan.
- Dalam beberapa sistem, FileSystemWatcher melaporkan perubahan pada file menggunakan format nama file 8.3 pendek. Misalnya, perubahan pada "LongFileName.LongExtension" dapat dilaporkan sebagai "LongFil~. Lon".
- Ukuran maksimum yang InternalBufferSize dapat Anda atur untuk properti untuk memantau direktori melalui jaringan adalah 64 KB.
Menyalin dan memindahkan folder
Sistem operasi dan FileSystemWatcher objek menginterpretasikan tindakan potong dan tempel atau tindakan pemindahan sebagai tindakan ganti nama untuk folder dan kontennya. Jika Anda memotong dan menempelkan folder dengan file ke dalam folder yang sedang diawasi, FileSystemWatcher objek hanya melaporkan folder sebagai baru, tetapi bukan kontennya karena pada dasarnya hanya diganti namanya.
Untuk diberi tahu bahwa konten folder telah dipindahkan atau disalin ke folder yang ditonton, sediakan OnChanged dan OnRenamed metode penanganan aktivitas seperti yang disarankan dalam tabel berikut.
| Pengendali Acara | Peristiwa Ditangani | Melakukan |
|---|---|---|
| OnChanged | Changed, , CreatedDeleted | Laporkan perubahan atribut file, file yang dibuat, dan file yang dihapus. |
| OnRenamed | Renamed | Cantumkan jalur lama dan baru dari file dan folder yang diganti namanya, diperluas secara rekursif jika diperlukan. |
Peristiwa dan ukuran buffer
Perhatikan bahwa beberapa faktor dapat memengaruhi peristiwa perubahan sistem file mana yang dimunculkan, seperti yang dijelaskan oleh berikut ini:
- Operasi sistem file umum mungkin memunculkan lebih dari satu peristiwa. Misalnya, ketika file dipindahkan dari satu direktori ke direktori lainnya, beberapa peristiwa OnChanged dan beberapa peristiwa OnCreated serta OnDeleted mungkin dimunculkan. Memindahkan file adalah operasi kompleks yang terdiri dari beberapa operasi sederhana, oleh karena itu meningkatkan beberapa peristiwa. Demikian juga, beberapa aplikasi (misalnya, perangkat lunak antivirus) dapat menyebabkan peristiwa sistem file tambahan yang terdeteksi oleh FileSystemWatcher.
- FileSystemWatcher bisa memantau disk selama tidak ditukar atau dihapus. FileSystemWatcher tidak menghasilkan peristiwa untuk CD dan DVD karena stempel waktu dan properti tidak dapat berubah. Komputer jarak jauh harus memiliki salah satu platform yang diperlukan yang diinstal agar komponen berfungsi dengan baik.
Perhatikan bahwa FileSystemWatcher mungkin melewatkan peristiwa ketika ukuran buffer terlampaui. Untuk menghindari melewatkan acara, ikuti panduan berikut:
- Tingkatkan ukuran buffer dengan mengatur InternalBufferSize properti .
- Hindari menonton file dengan nama file panjang, karena nama file panjang berkontribusi untuk mengisi buffer. Pertimbangkan untuk mengganti nama file ini menggunakan nama yang lebih pendek.
- Jaga kode penanganan peristiwa Anda sesingkat mungkin.
Konstruktor
| Nama | Deskripsi |
|---|---|
| FileSystemWatcher() |
Menginisialisasi instans baru dari kelas FileSystemWatcher. |
| FileSystemWatcher(String, String) |
Menginisialisasi instans FileSystemWatcher baru kelas, mengingat direktori dan jenis file yang ditentukan untuk dipantau. |
| FileSystemWatcher(String) |
Menginisialisasi instans FileSystemWatcher baru kelas, mengingat direktori yang ditentukan untuk dipantau. |
Properti
| Nama | Deskripsi |
|---|---|
| CanRaiseEvents |
Mendapatkan nilai yang menunjukkan apakah komponen dapat menaikkan peristiwa. (Diperoleh dari Component) |
| Container |
Mendapatkan IContainer yang berisi Component. (Diperoleh dari Component) |
| DesignMode |
Mendapatkan nilai yang menunjukkan apakah Component saat ini dalam mode desain. (Diperoleh dari Component) |
| EnableRaisingEvents |
Mendapatkan atau menetapkan nilai yang menunjukkan apakah komponen diaktifkan. |
| Events |
Mendapatkan daftar penanganan aktivitas yang dilampirkan ke Componentini. (Diperoleh dari Component) |
| Filter |
Mendapatkan atau mengatur string filter yang digunakan untuk menentukan file apa yang dipantau dalam direktori. |
| Filters |
Mendapatkan koleksi semua filter yang digunakan untuk menentukan file apa yang dipantau dalam direktori. |
| IncludeSubdirectories |
Mendapatkan atau menetapkan nilai yang menunjukkan apakah subdirektori dalam jalur yang ditentukan harus dipantau. |
| InternalBufferSize |
Mendapatkan atau mengatur ukuran (dalam byte) dari buffer internal. |
| NotifyFilter |
Mendapatkan atau mengatur jenis perubahan yang harus diwaspadai. |
| Path |
Mendapatkan atau mengatur jalur direktori untuk ditonton. |
| Site |
Mendapatkan atau mengatur ISite untuk FileSystemWatcher. |
| SynchronizingObject |
Mendapatkan atau mengatur objek yang digunakan untuk melakukan marshal panggilan penanganan aktivitas yang dikeluarkan sebagai akibat dari perubahan direktori. |
Metode
| Nama | Deskripsi |
|---|---|
| BeginInit() |
Memulai inisialisasi yang FileSystemWatcher digunakan pada formulir atau digunakan oleh komponen lain. Inisialisasi terjadi pada waktu proses. |
| CreateObjRef(Type) |
Membuat objek yang berisi semua informasi relevan yang diperlukan untuk menghasilkan proksi yang digunakan untuk berkomunikasi dengan objek jarak jauh. (Diperoleh dari MarshalByRefObject) |
| Dispose() |
Merilis sumber daya yang tidak dikelola yang digunakan oleh FileSystemWatcher. |
| Dispose() |
Merilis semua sumber daya yang digunakan oleh Component. (Diperoleh dari Component) |
| Dispose(Boolean) |
Merilis sumber daya yang tidak dikelola yang FileSystemWatcher digunakan oleh dan secara opsional merilis sumber daya terkelola. |
| EndInit() |
Mengakhiri inisialisasi yang FileSystemWatcher digunakan pada formulir atau digunakan oleh komponen lain. Inisialisasi terjadi pada waktu proses. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetLifetimeService() |
Kedaluwarsa.
Mengambil objek layanan seumur hidup saat ini yang mengontrol kebijakan seumur hidup untuk instans ini. (Diperoleh dari MarshalByRefObject) |
| GetService(Type) |
Mengembalikan objek yang mewakili layanan yang disediakan oleh Component atau oleh Container. (Diperoleh dari Component) |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| InitializeLifetimeService() |
Kedaluwarsa.
Mendapatkan objek layanan seumur hidup untuk mengontrol kebijakan seumur hidup untuk instans ini. (Diperoleh dari MarshalByRefObject) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| MemberwiseClone(Boolean) |
Membuat salinan dangkal objek MarshalByRefObject saat ini. (Diperoleh dari MarshalByRefObject) |
| OnChanged(FileSystemEventArgs) |
Menaikkan peristiwa Changed. |
| OnCreated(FileSystemEventArgs) |
Menaikkan peristiwa Created. |
| OnDeleted(FileSystemEventArgs) |
Menaikkan peristiwa Deleted. |
| OnError(ErrorEventArgs) |
Menaikkan peristiwa Error. |
| OnRenamed(RenamedEventArgs) |
Menaikkan peristiwa Renamed. |
| ToString() |
Mengembalikan yang String berisi nama Component, jika ada. Metode ini tidak boleh ditimpa. (Diperoleh dari Component) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
| WaitForChanged(WatcherChangeTypes, Int32) |
Metode sinkron yang mengembalikan struktur yang berisi informasi spesifik tentang perubahan yang terjadi, mengingat jenis perubahan yang ingin Anda pantau dan waktu (dalam milidetik) untuk menunggu sebelum waktu habis. |
| WaitForChanged(WatcherChangeTypes, TimeSpan) |
Secara sinkron mengembalikan struktur yang berisi informasi spesifik tentang perubahan yang terjadi, mengingat jenis perubahan untuk dipantau. |
| WaitForChanged(WatcherChangeTypes) |
Metode sinkron yang mengembalikan struktur yang berisi informasi tertentu tentang perubahan yang terjadi, mengingat jenis perubahan yang ingin Anda pantau. |
Acara
| Nama | Deskripsi |
|---|---|
| Changed |
Terjadi ketika file atau direktori dalam yang ditentukan Path diubah. |
| Created |
Terjadi ketika file atau direktori dalam yang ditentukan Path dibuat. |
| Deleted |
Terjadi ketika file atau direktori dalam yang ditentukan Path dihapus. |
| Disposed |
Terjadi ketika komponen dibuang oleh panggilan ke metode Dispose(). (Diperoleh dari Component) |
| Error |
Terjadi ketika instans FileSystemWatcher tidak dapat melanjutkan pemantauan berubah atau ketika buffer internal meluap. |
| Renamed |
Terjadi ketika file atau direktori dalam yang ditentukan Path diganti namanya. |