當前位置:首頁 » 文件管理 » vbnet獲取文件夾

vbnet獲取文件夾

發布時間: 2025-03-27 06:40:12

① 如何使用vb.net獲取一個文件夾里最後一個數據文件的名稱

function Newfile as fileinfo
Dim dic As New System.IO.DirectoryInfo("C:\Users\Q\Desktop\數據")
Dim files = dic.GetFiles.OrderByDescending(Function(s) s.CreationTime)
if files.
return files.first
end function

注意引入 system.linq

② VB.NET中監視文件夾的變化

有時候 處於業務的需要 我們要不斷的監視文件的變化 比如文件的創建 刪除 重命名等 而且某些人要確保重要文件的只讀 並且要及時的報告文件版本的變更情況 或者 你想監視你的文件夾被別人更改 肆意刪除而又不知道是誰乾的 在什麼時候乾的?於是你就考慮要寫一個監視程序 偷偷的 記錄文件夾 *** 作的情況

有些人採取常規的方式 即寫一個桌面應用程序 其界面可能是隱藏的 採用每隔一個事件片段讀取文件信息 然後寫到一個log文件中 然後設置系統啟動的事件自動載入程序 (好像很多人是這樣竊取QQ密碼的 ) 其缺點 不是連續的獲取信息 因為他們採用了Timer的tick事件 在NT系統中 可能要一定的許可權才可以運行 比如要管理員身份等 還有系統中會有進程顯示 顯然很容易shutdown

我們建議的方案 採用 NET的Windows Service 首先可以克服以上缺點 而且較VB 的編程而言 NET中寫windows service一如反掌

思路 在 NET創建的服務中調用System IO FileSystemWatcher對象 每次被監視的文件或者文件夾變化的時候 調用IO系統的FileStream和StreamWriter把變更信息寫到log文件中

關於 NET中的Windows服務

Windows服務 是一些長久運行的程序 而並不需要依靠登錄用戶或客戶程序來保持它的運行 它們沒有自己的用戶界面 可以在它們自己獨有的安全級別和會話上下文中運行 我們比較熟悉的Windows服務範例包含了從列印池到SQL伺服器以及它的分布式事務協作(DTC) 服務只可以運行在NT 以及後繼產品比如XP下運行 它們通過Microsoft Management Console (MMC)提供了一個專門的管理界面(開始->運行 >Services msc)

在 NET中創建項目的時候 有一個Windows服務的模板 選擇新建 這個操作自動為我建立了一個新的類 它是繼承了 NET內建了System ServiceProcess ServiceBase類 同時它提供給我一個可視化的設計器 一個圖形化的快速開發工具 它特別的為那些本身沒有用戶界面的工程 我可以點擊這個設計器 設定我的服務的名字(我命名為 File Watching )

當啟動某項服務時 系統將定位相應的可執行文件 並運行該服務的 OnStart 方法(它包含在可執行文件內) 但是 運行服務與運行可執行文件並不相同 可執行文件僅載入服務 服務則通過 服務控制管理器 訪問(例如啟動和停止)

當首次在服務上調用 開始 時 可執行文件將調用 ServiceBase 派生類的構造函數 在構造函數執行之後將立即調用 OnStart 命令處理方法 在服務首次載入之後 構造函數不會再次執行 因此有必要將構造函數執行的處理和 OnStart 執行的處理分開 可以由 OnStop 釋放的任何資源都應在 OnStart 中創建 如果服務在 OnStop 釋放資源後再次啟動 那麼 在構造函數中創建資源會妨礙這些資源的正確創建

服務控制管理器 (SCM) 提供與服務交互的方式 可以使用 SCM 將 開始 (Start) 停止 (Stop) 暫停 (Pause) 繼續 (Continue) 或自定義命令傳遞到服務中 SCM 使用 CanStop 和 CanPauseAndContinue 的值 決定服務是否接受 停止 暫停 或 繼續 命令 僅當服務類中相應的屬性 CanStop 或 CanPauseAndContinue 為 true 時 才會在 SCM 的上下文菜單中啟用 停止 暫停 或 繼續 如果已啟用 則相應的命令將傳遞到服務 並且調用 OnStop OnPause 或 OnContinue 如果 CanStop CanShutdown 或 CanPauseAndContinue 為 false 則即使已實現相應的命令處理方法(如 OnStop) 也不會予以處理

上面是創建任何一個服務 我們都會涉及到的 只是 具體在監視文件夾變化的時候 我們用到了FileSystemWatcher

關於FileSystemWatcher

偵聽文件系統更改通知 並在目錄或目錄中的文件發生更改時引發事件

使用 FileSystemWatcher 監視指定目錄中的更改 可監視指定目錄中的文件或子目錄的更改 該組件可以監視本地計算機 網路驅動器或遠程計算機上的文件 (當然只讀的媒體介質比如cd和dvd 它們文件的屬性不會改變 所以也就不能觸發事件)

若要監視所有文件中的更改 請將 Filter 屬性設置為空字元串 ( ) 若要監視特定的文件 請將 Filter 屬性設置為該文件名 例如 若要監視文件 MyDoc txt 中的更改 請將 Filter 屬性設置為 MyDoc txt 也可以監視特定類型文件中的更改 例如 若要監視文本文件中的更改 請將 Filter 屬性設置為 * txt

可監視目錄或文件中的若干種更改 例如 可監視文件或目錄的 Attributes LastWrite 日期和時間或 Size 方面的更改 通過將 FileSystemWatcher NotifyFilter 屬性設置為 NotifyFilters 值之一來達到此目的

可監視文件或目錄的重命名 刪除或創建 例如 若要監視文本文件的重命名 請將 Filter 屬性設置為 * txt 並調用 WaitForChanged 方法之一 調用時給出 WatcherChangeTypes 值的 Renamed

Demo

新建一個project 選擇windows 服務類型 命名為WinServiceFileWatching 我們看到project的引用中自動添加了System ServiceProcess名空間(這就是創建一個服務的函數集) 從工具中的組件中選擇FileSystemWatcher 拖放到service 的設計模式上 然後設置如下屬性

Filter 獲取或設置篩選字元串 用於確定在目錄中監視哪些文件 我們設置為* * 即所有文件 IncludeSubdirectories 獲取或設置一個值 該值指示是否監視指定路徑中的子目錄 設置為true Path 獲取或設置要監視的目錄的路徑 設置為我們要監視的對象 比如C:DonnetData

然後添加以下代碼

Protected Overrides Sub OnStart(ByVal args() As String)

在此處添加啟動服務的代碼 此方法應設置具體的操作

以便服務可以執行它的工作

FileSystemWatcher EnableRaisingEvents = True

我們也可以根據輸入的參數args動態設定要監視的對象

FileSystemWatcher path= args( )

End Sub

創建文件(夾)時候觸發 記錄創建信息到e:log txt中

Private Sub FileSystemWatcher _Created(ByVal sender As Object ByVal e As System IO FileSystemEventArgs) Handles FileSystemWatcher Created

Dim fs As New FileStream( e:log txt FileMode Append)

Dim sw As New StreamWriter(fs)

sw WriteLine(Now() & Microsoft VisualBasic vbTab & 創建 & e FullPath)

sw Close()

fs Close()

End Sub

Rename文件(夾)時候觸發 記錄創建信息到e:log txt中

Private Sub FileSystemWatcher _Renamed(ByVal sender As Object ByVal e As System IO RenamedEventArgs) Handles FileSystemWatcher Renamed

Dim fs As New FileStream( e:log txt FileMode Append)

Dim sw As New StreamWriter(fs)

sw WriteLine(Now() & Microsoft VisualBasic vbTab & 重命名 & e OldFullPath & & e FullPath)sw Close()

fs Close()

End Sub

刪除文件(夾)時候觸發 記錄創建信息到e:log txt中

Private Sub FileSystemWatcher _Deleted(ByVal sender As Object ByVal e As System IO FileSystemEventArgs) Handles FileSystemWatcher Deleted

Dim fs As New FileStream( e:log txt FileMode Append)

Dim sw As New StreamWriter(fs)

sw WriteLine(Now() & Microsoft VisualBasic vbTab & 刪除 & e FullPath)

sw Close()fs Close()

End Sub

到目前為止 這個服務已經寫好了 下面作一個安裝程序

在service的設計模式上點擊右鍵 選擇添加安裝程序 系統會自動添加一個類ProjectInstaller 設計模式上有一個ServiceProcessInstaller 和ServiceInstaller 設置ServiceInstaller 的Display Name為File Watching Service starttype為Automatic 表示自動啟動 設置ServiceProcessInstaller 的account為LocalSystem

由於服務是不能運行的 我們選擇生成解決方案 ok!

最後安裝我們的服務

NET Framework自帶了一個工具 InstallUtil 使用很簡單InstallUtil c:winservicefilewatchinginwinservicefilewatching exe 剛才編譯好的程序的路徑 這樣就安裝好了 Uninstall也很容易 首先SCM中關閉服務 InstallUtil/u c: winservicefilewatching exe the same path

這樣在系統的services中就會多出一個服務 顯示為File Watching Service 選擇啟動就可以開始監視

總結

lishixin/Article/program/net/201311/15520

熱點內容
安卓手機怎麼讓電量顯示數字 發布:2025-03-30 05:15:49 瀏覽:848
三星的安卓se狀態是什麼 發布:2025-03-30 05:15:47 瀏覽:777
編程電視 發布:2025-03-30 05:14:20 瀏覽:49
php數組過濾 發布:2025-03-30 05:01:48 瀏覽:575
php合並二維數組 發布:2025-03-30 04:43:18 瀏覽:820
車載安卓中控怎麼換界面 發布:2025-03-30 04:33:56 瀏覽:414
android獲取網路數據 發布:2025-03-30 04:33:50 瀏覽:599
一個網站一個ftp 發布:2025-03-30 04:28:32 瀏覽:167
cs伺服器ip指令 發布:2025-03-30 04:12:55 瀏覽:562
java環比 發布:2025-03-30 04:12:04 瀏覽:128