FileSystemWatcher Kelas

Definisi

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
FileSystemWatcher
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.

Berlaku untuk

Lihat juga