• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            君子性非異也,善假于物也。

            如有恒,何須三更起,半夜眠;最怕莫,三天打魚(yú)兩天曬網(wǎng),竹籃打水一場(chǎng)空!
            posts - 31, comments - 23, trackbacks - 0, articles - 30
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            文件系統(tǒng)監(jiān)控

            Posted on 2006-10-15 13:37 neter 閱讀(1591) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 程序設(shè)計(jì)
            NET Framework 類庫(kù)?
            FileSystemWatcher 類?

            偵聽(tīng)文件系統(tǒng)更改通知,并在目錄或目錄中的文件發(fā)生更改時(shí)引發(fā)事件。

            命名空間:System.IO
            程序集:System(在 system.dll 中)

            繼承層次結(jié)構(gòu)

            C# 用法:

            1
            public?class?FileSystemWatcher?:?Component,?ISupportInitialize

            使用 FileSystemWatcher 監(jiān)視指定目錄中的更改。可監(jiān)視指定目錄中的文件或子目錄的更改。可以創(chuàng)建一個(gè)組件來(lái)監(jiān)視本地計(jì)算機(jī)、網(wǎng)絡(luò)驅(qū)動(dòng)器或遠(yuǎn)程計(jì)算機(jī)上的文件。

            若要通過(guò)文件擴(kuò)展名監(jiān)視所有文件中的更改,請(qǐng)將 Filter 屬性設(shè)置為空字符串 ("") 或使用通配符(“*.*”)。若要監(jiān)視特定的文件,請(qǐng)將 Filter 屬性設(shè)置為該文件名。例如,若要監(jiān)視文件 MyDoc.txt 中的更改,請(qǐng)將 Filter 屬性設(shè)置為“MyDoc.txt”。也可以監(jiān)視特定類型文件中的更改。例如,若要監(jiān)視文本文件中的更改,請(qǐng)將 Filter 屬性設(shè)置為“*.txt”。

            可監(jiān)視目錄或文件中的若干種更改。例如,可監(jiān)視文件或目錄的 AttributesLastWrite 日期和時(shí)間或 Size 方面的更改。通過(guò)將 NotifyFilter 屬性設(shè)置為 NotifyFilters 值之一來(lái)達(dá)到此目的。有關(guān)可監(jiān)視的更改類型的更多信息,請(qǐng)參見(jiàn) NotifyFilters

            可監(jiān)視文件或目錄的重命名、刪除或創(chuàng)建。例如,若要監(jiān)視文本文件的重命名,請(qǐng)將 Filter 屬性設(shè)置為“*.txt”,并使用為其參數(shù)指定的 Renamed 來(lái)調(diào)用 WaitForChanged 方法。

            Windows 操作系統(tǒng)在 FileSystemWatcher 創(chuàng)建的緩沖區(qū)中通知組件文件發(fā)生更改。如果短時(shí)間內(nèi)有很多更改,則緩沖區(qū)可能會(huì)溢出。這將導(dǎo)致組件失去對(duì)目錄更改的跟蹤,并且它將只提供一般性通知。使用 InternalBufferSize 屬性來(lái)增加緩沖區(qū)大小的開(kāi)銷較大,因?yàn)樗鼇?lái)自無(wú)法換出到磁盤的非頁(yè)面內(nèi)存,所以應(yīng)確保緩沖區(qū)大小適中(盡量小,但也要有足夠大小以便不會(huì)丟失任何文件更改事件)。若要避免緩沖區(qū)溢出,請(qǐng)使用 NotifyFilterIncludeSubdirectories 屬性,以便可以篩選掉不想要的更改通知。

            有關(guān) FileSystemWatcher 的實(shí)例的初始屬性值列表,請(qǐng)參見(jiàn) FileSystemWatcher 構(gòu)造函數(shù)。

            使用 FileSystemWatcher 類時(shí),請(qǐng)注意以下事項(xiàng)。

            • 不忽略隱藏文件。

            • 在某些系統(tǒng)中,FileSystemWatcher 使用 8.3 短文件名格式報(bào)告文件更改。例如,對(duì)“LongFileName.LongExtension”的更改可能報(bào)告為“LongFi~.Lon”。

            • 此類在應(yīng)用于所有成員的類級(jí)別上包含一個(gè)鏈接要求和一個(gè)繼承要求。如果直接調(diào)用方或派生類不具有完全信任權(quán)限,則會(huì)引發(fā) SecurityException。有關(guān)安全要求的詳細(xì)信息,請(qǐng)參見(jiàn) 鏈接要求

            復(fù)制和移動(dòng)文件夾

            操作系統(tǒng)和 FileSystemWatcher 對(duì)象將剪切和粘貼操作或移動(dòng)操作解釋為對(duì)文件夾及其內(nèi)容的重命名操作。如果將包含文件的文件夾剪切并粘貼到受監(jiān)視的文件夾中,則 FileSystemWatcher 對(duì)象僅將文件夾報(bào)告為新建,但不能將其內(nèi)容報(bào)告為新建,因?yàn)閷?shí)際上只是對(duì)它們進(jìn)行了重命名。

            若要接收已將文件夾內(nèi)容移動(dòng)或復(fù)制到受監(jiān)視的文件夾中的通知,請(qǐng)根據(jù)下表中的建議提供 OnChangedOnRenamed 事件處理程序方法。

            ?

            事件處理程序

            已處理的事件

            執(zhí)行

            OnChanged

            Changed, Created, Deleted

            報(bào)告文件屬性的更改、創(chuàng)建的文件和刪除的文件。

            OnRenamed

            Renamed

            列出重命名的文件和文件夾的新舊路徑,需要時(shí)可以遞歸擴(kuò)展。

            事件和緩沖區(qū)大小

            請(qǐng)注意,有幾個(gè)因素可能影響引發(fā)哪些文件系統(tǒng)更改事件,如下所述:

            • 公共文件系統(tǒng)操作可能會(huì)引發(fā)多個(gè)事件。例如,將文件從一個(gè)目錄移到另一個(gè)目錄時(shí),可能會(huì)引發(fā)若干 OnChanged 以及一些 OnCreatedOnDeleted 事件。移動(dòng)文件是一個(gè)包含多個(gè)簡(jiǎn)單操作的復(fù)雜操作,因此會(huì)引發(fā)多個(gè)事件。同樣,有些應(yīng)用程序(例如,防病毒軟件)可能會(huì)導(dǎo)致可由 FileSystemWatcher 檢測(cè)到的其他文件系統(tǒng)事件。

            • 只要磁盤沒(méi)有切換或移除,FileSystemWatcher 就可監(jiān)視它們。因?yàn)?CD 和 DVD 的時(shí)間戳和屬性不能更改,所以 FileSystemWatcher 不為 CD 和 DVD 引發(fā)事件。要使該組件正常運(yùn)行,遠(yuǎn)程計(jì)算機(jī)必須具有所需的這些平臺(tái)之一。但是,無(wú)法從 Windows NT 4.0 計(jì)算機(jī)監(jiān)視遠(yuǎn)程 Windows NT 4.0 計(jì)算機(jī)。

            • 在 Windows XP(Service Pack 1 之前版本)或者 Windows 2000 SP2 或更低版本中,如果多個(gè) FileSystemWatcher 對(duì)象正在監(jiān)視同一個(gè) UNC 路徑,則只有其中一個(gè)對(duì)象會(huì)引發(fā)事件。在運(yùn)行 Windows XP SP1 及之后版本、Windows 2000 SP3 或之后版本或者 Windows Server 2003 的計(jì)算機(jī)上,所有 FileSystemWatcher 對(duì)象都將引發(fā)相應(yīng)的事件。

            • 設(shè)置 Filter 不會(huì)減少進(jìn)入緩沖區(qū)中的內(nèi)容。

            請(qǐng)注意,由于 Windows 操作系統(tǒng)的依賴項(xiàng),當(dāng)丟失某個(gè)事件或超出緩沖區(qū)大小時(shí),FileSystemWatcher 不會(huì)引發(fā) Error 事件。若要防止丟失事件,請(qǐng)遵從這些準(zhǔn)則:

            • 使用 InternalBufferSize 屬性增加緩沖區(qū)大小可以防止丟失文件系統(tǒng)更改事件。

            • 避免監(jiān)視帶有長(zhǎng)文件名的文件。考慮使用較短的名稱進(jìn)行重命名。

            • 盡可能使事件處理代碼短小。

            FileSystemWatcher 成員

            公共構(gòu)造函數(shù)公共構(gòu)造函數(shù)

            ?名稱 說(shuō)明
            Public methodFileSystemWatcher已重載。初始化 FileSystemWatcher 類的新實(shí)例。
            公共屬性公共屬性
            ?名稱 說(shuō)明
            Public propertyContainer? 獲取 IContainer,它包含 Component。(從 Component 繼承。)
            Public propertyEnableRaisingEvents獲取或設(shè)置一個(gè)值,該值指示是否啟用此組件。
            Public propertyFilter獲取或設(shè)置篩選字符串,用于確定在目錄中監(jiān)視哪些文件。
            Public propertyIncludeSubdirectories獲取或設(shè)置一個(gè)值,該值指示是否監(jiān)視指定路徑中的子目錄。
            Public propertyInternalBufferSize獲取或設(shè)置內(nèi)部緩沖區(qū)的大小。
            Public propertyNotifyFilter獲取或設(shè)置要監(jiān)視的更改類型。
            Public propertyPath獲取或設(shè)置要監(jiān)視的目錄的路徑。
            Public propertySite已重寫。獲取或設(shè)置 FileSystemWatcherISite
            Public propertySynchronizingObject獲取或設(shè)置一個(gè)對(duì)象,該對(duì)象用于封送因目錄更改而發(fā)出的事件處理程序調(diào)用。
            受保護(hù)的屬性受保護(hù)的屬性
            ?名稱 說(shuō)明
            Protected propertyCanRaiseEvents? 獲取一個(gè)指示組件是否可以引發(fā)事件的值。(從 Component 繼承。)
            Protected propertyDesignMode? 獲取一個(gè)值,用以指示 Component 當(dāng)前是否處于設(shè)計(jì)模式。(從 Component 繼承。)
            Protected propertyEvents? 獲取附加到此 Component 的事件處理程序的列表。(從 Component 繼承。)
            公共方法公共方法
            ?名稱 說(shuō)明
            Public methodBeginInit開(kāi)始初始化在窗體上使用或由另一個(gè)組件使用的 FileSystemWatcher。初始化發(fā)生在運(yùn)行時(shí)。
            Public methodCreateObjRef? 創(chuàng)建一個(gè)對(duì)象,該對(duì)象包含生成用于與遠(yuǎn)程對(duì)象進(jìn)行通信的代理所需的全部相關(guān)信息。 (從 MarshalByRefObject 繼承。)
            Public methodDispose已重載。 釋放由 FileSystemWatcher 占用的資源。
            Public methodEndInit結(jié)束在窗體上使用或由另一個(gè)組件使用的 FileSystemWatcher 的初始化。初始化發(fā)生在運(yùn)行時(shí)。
            Public methodEquals? 已重載。 確定兩個(gè) Object 實(shí)例是否相等。 (從 Object 繼承。)
            Public methodGetHashCode? 用作特定類型的哈希函數(shù)。GetHashCode 適合在哈希算法和數(shù)據(jù)結(jié)構(gòu)(如哈希表)中使用。 (從 Object 繼承。)
            Public methodGetLifetimeService? 檢索控制此實(shí)例的生存期策略的當(dāng)前生存期服務(wù)對(duì)象。 (從 MarshalByRefObject 繼承。)
            Public methodGetType? 獲取當(dāng)前實(shí)例的 Type。 (從 Object 繼承。)
            Public methodInitializeLifetimeService? 獲取控制此實(shí)例的生存期策略的生存期服務(wù)對(duì)象。 (從 MarshalByRefObject 繼承。)
            Public methodStaticReferenceEquals? 確定指定的 Object 實(shí)例是否是相同的實(shí)例。 (從 Object 繼承。)
            Public methodToString? 返回包含 Component 的名稱的 String(如果有)。不應(yīng)重寫此方法。 (從 Component 繼承。)
            Public methodWaitForChanged已重載。 返回結(jié)構(gòu)的同步方法,該結(jié)構(gòu)包含有關(guān)已發(fā)生的更改的特定信息。
            受保護(hù)的方法受保護(hù)的方法
            ?名稱 說(shuō)明
            Protected methodDispose已重載。 已重寫。 釋放由 FileSystemWatcher 占用的資源。
            Protected methodFinalize? 在通過(guò)垃圾回收將 Component 回收之前,釋放非托管資源并執(zhí)行其他清理操作。 (從 Component 繼承。)
            Protected methodGetService? 返回一個(gè)對(duì)象,該對(duì)象表示由 Component 或它的 Container 提供的服務(wù)。 (從 Component 繼承。)
            Protected methodMemberwiseClone? 已重載。 (從 MarshalByRefObject 繼承。)
            Protected methodOnChanged引發(fā) Changed 事件。
            Protected methodOnCreated引發(fā) Created 事件。
            Protected methodOnDeleted引發(fā) Deleted 事件。
            Protected methodOnError引發(fā) Error 事件。
            Protected methodOnRenamed引發(fā) Renamed 事件。
            公共事件公共事件
            ?名稱 說(shuō)明
            Public eventChanged當(dāng)更改指定 Path 中的文件和目錄時(shí)發(fā)生。
            Public eventCreated當(dāng)在指定 Path 中創(chuàng)建文件和目錄時(shí)發(fā)生。
            Public eventDeleted刪除指定 Path 中的文件或目錄時(shí)發(fā)生。
            Public eventDisposed? 添加事件處理程序以偵聽(tīng)組件上的 Disposed 事件。(從 Component 繼承。)
            Public eventError當(dāng)內(nèi)部緩沖區(qū)溢出時(shí)發(fā)生。
            Public eventRenamed重命名指定 Path 中的文件或目錄時(shí)發(fā)生。


            下面的示例創(chuàng)建一個(gè) FileSystemWatcher,以便在運(yùn)行時(shí)監(jiān)視指定的目錄。組件設(shè)置為監(jiān)視 LastWriteLastAccess 時(shí)間方面的更改,以及目錄中文本文件的創(chuàng)建、刪除或重命名。如果更改、創(chuàng)建或刪除文件,文件路徑將被輸出到控制臺(tái)。在文件重命名后,舊路徑和新路徑都輸出到控制臺(tái)。

            在此示例中使用 System.DiagnosticsSystem.IO 命名空間。

            C# 事例:

            ?1
            public?class?Watcher
            ?2{
            ?3
            ?4????public?static?void?Main()
            ?5????{
            ?6????Run();
            ?7
            ?8????}

            ?9
            10????[PermissionSet(SecurityAction.Demand,?Name="FullTrust")]
            11????public?static?void?Run()
            12????{
            13????????string[]?args?=?System.Environment.GetCommandLineArgs();
            14?
            15????????//?If?a?directory?is?not?specified,?exit?program.
            16????????if(args.Length?!=?2)
            17????????{
            18????????????//?Display?the?proper?way?to?call?the?program.
            19????????????Console.WriteLine("Usage:?Watcher.exe?(directory)");
            20????????????return;
            21????????}

            22
            23????????//?Create?a?new?FileSystemWatcher?and?set?its?properties.
            24????????FileSystemWatcher?watcher?=?new?FileSystemWatcher();
            25????????watcher.Path?=?args[1];
            26????????/*?Watch?for?changes?in?LastAccess?and?LastWrite?times,?and?
            27???????????the?renaming?of?files?or?directories.?*/

            28????????watcher.NotifyFilter?=?NotifyFilters.LastAccess?|?NotifyFilters.LastWrite?
            29???????????|?NotifyFilters.FileName?|?NotifyFilters.DirectoryName;
            30????????//?Only?watch?text?files.
            31????????watcher.Filter?=?"*.txt";
            32
            33????????//?Add?event?handlers.
            34????????watcher.Changed?+=?new?FileSystemEventHandler(OnChanged);
            35????????watcher.Created?+=?new?FileSystemEventHandler(OnChanged);
            36????????watcher.Deleted?+=?new?FileSystemEventHandler(OnChanged);
            37????????watcher.Renamed?+=?new?RenamedEventHandler(OnRenamed);
            38
            39????????//?Begin?watching.
            40????????watcher.EnableRaisingEvents?=?true;
            41
            42????????//?Wait?for?the?user?to?quit?the?program.
            43????????Console.WriteLine("Press?\'q\'?to?quit?the?sample.");
            44????????while(Console.Read()!='q');
            45????}

            46
            47????//?Define?the?event?handlers.
            48????private?static?void?OnChanged(object?source,?FileSystemEventArgs?e)
            49????{
            50????????//?Specify?what?is?done?when?a?file?is?changed,?created,?or?deleted.
            51???????Console.WriteLine("File:?"?+??e.FullPath?+?"?"?+?e.ChangeType);
            52????}

            53
            54????private?static?void?OnRenamed(object?source,?RenamedEventArgs?e)
            55????{
            56????????//?Specify?what?is?done?when?a?file?is?renamed.
            57????????Console.WriteLine("File:?{0}?renamed?to?{1}",?e.OldFullPath,?e.FullPath);
            58????}

            59}
            嫩草影院久久国产精品| 久久毛片一区二区| 日本免费一区二区久久人人澡| 久久青青草原国产精品免费| 久久国产福利免费| 久久天天躁狠狠躁夜夜不卡| 久久精品无码一区二区无码| 国产精品成人久久久久三级午夜电影| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 国产V综合V亚洲欧美久久| www.久久热| 亚洲精品无码久久久久AV麻豆| 亚洲国产精品无码久久一线| 久久综合狠狠色综合伊人| 中文字幕亚洲综合久久菠萝蜜| 日韩精品久久无码人妻中文字幕 | 麻豆av久久av盛宴av| 激情伊人五月天久久综合| 久久久WWW免费人成精品| 男女久久久国产一区二区三区| 99热成人精品免费久久| 日日躁夜夜躁狠狠久久AV| 久久精品无码一区二区三区日韩 | 国产精品丝袜久久久久久不卡| 久久中文字幕精品| 成人精品一区二区久久久| 亚洲午夜久久久久久久久电影网 | 丁香五月网久久综合| 中文字幕热久久久久久久| 精品国产乱码久久久久久浪潮| 久久夜色精品国产欧美乱| 超级97碰碰碰碰久久久久最新| 国产成人久久久精品二区三区| 亚洲欧美伊人久久综合一区二区| 久久99热这里只有精品国产| 国产精品一区二区久久不卡| 久久人人爽人人爽人人爽| 日韩久久久久中文字幕人妻| 亚洲国产成人久久精品动漫| 久久精品国产亚洲AV麻豆网站| 久久精品国产99国产精品导航|