2010-09-23 59 views
2

我已經爲位於NetworkStorage設備(沒有O.S.)的文件夾實施了FileSystemWatcher。C#FileSystemWatcher嚴重問題?

這種情況是,我們有兩臺機器說機器A和機器B. 我的應用程序在我的表單Button1和Button2上有兩個按鈕。我已經編寫了用於重命名Test.txt文件的代碼。

Button1的:重命名Test.txt文件到Test007.txt和 將Button2:重命名文件Test007.txt到TEST.TXT

並假設我已經從A和B同時運行那朵exe文件。然後,我可以通過按機器A中的Button1重命名文件,現在如果我試圖從另一臺機器B重命名文件,則它給出錯誤

「System.ComponentModel.Win32Exception:指定的服務器無法執行請求的操作」

任何人是有關於它的主意......請幫助我們找到解決方案。我們對文件夾擁有適當的權利。

注意:代碼也適用於局域網文件夾,所以代碼是完美的。它只是不適用於NetworkStoreDevice。

+7

代碼怎樣才能完美的,如果它不工作?你可以發佈代碼,以便我們可以看到是否有問題嗎? – 2010-09-23 14:01:18

+2

@ jeff-yates - 這是完美的,因爲它不是一個錯誤。這是一個功能。 :-) – klabranche 2010-09-23 14:03:41

回答

5

我們建立了其中一個Windows服務的服務器上運行被監視的文件夾,當文件被添加到該文件夾​​,分別讀取文件,處理一個公司的產品(在這種情況下,創造了一個條碼的佈局和印一臺條形碼打印機),然後刪除。

一切正常,爲多家客戶提供了相當不錯的表現,直到我們遇到一個客戶,則只是有時工作來了。當許多文件一次添加到文件夾時,會出現特別的問題。

問題是我們正在觀看的文件夾在samba文件系統中共享,而FileSystemWatcher在samba文件系統共享(Google for FileSystemwatcher samba)上無法可靠運行。既然你在談論一個「NetworkStorage Device」,我想你的意思是說它是一個NAS,而且NAS經常使用Linux/Unix操作系統並使用samba公開共享。

我們的解決方案是一個功能添加到我們的軟件,以便它可以配置在需要的時候使用輪詢。

0

使用FileSystemWatcher的組合和輪詢

的FileSystemWatcher的工作,將90%的時間,但增加了一個民意調查每隔x分鐘捕捉到任何可能錯過......

x的值取決於你「實時」需要如何

3

FileSystemWatcher的依賴於操作系統,引發該事件。如果存儲設備上沒有操作系統,則沒有可用的操作系統來提升該事件。

注意幾個因素可以影響的文件系統變化引發事件,如下面的描述:

常見的文件系統操作可能會引發多個事件。例如,當文件從一個目錄移動到另一個目錄時,可能會引發幾個OnChanged和一些OnCreated和OnDeleted事件。移動文件是一項複雜的操作,由多個簡單操作組成,因此引發多個事件。同樣,某些應用程序(例如防病毒軟件)可能會導致由FileSystemWatcher檢測到的其他文件系統事件。

FileSystemWatcher只要不切換或刪除,就可以觀看磁盤。 FileSystemWatcher不會引發CD和DVD的事件,因爲時間戳和屬性不能更改。遠程計算機必須安裝所需的平臺之一才能使組件正常運行。

如果多個FileSystemWatcher對象在Service Pack 1或Windows 2000 SP2或更低版本之前的Windows XP中觀看相同的UNC路徑,則只有其中一個對象會引發事件。在運行Windows XP SP1及更新版本,Windows 2000 SP3或更新版本或Windows Server 2003的計算機上,所有FileSystemWatcher對象都會引發相應的事件。

設置Filter屬性不會減少進入緩衝區的內容。

請注意,由於Windows操作系統的依賴性,當事件丟失或超過緩衝區大小時,FileSystemWatcher不會引發錯誤事件。爲避免遺漏事件,請遵循以下指導原則:

使用InternalBufferSize屬性增加緩衝區大小可防止丟失文件系統更改事件。

避免觀看長文件名的文件。考慮使用較短的名稱進行重命名。

保持您的事件處理代碼儘可能短。

來源:MSDN Library Reference: FileSystemWatcher Class