2011-01-05 47 views
1

這就是我想要做的事:在c#中有一種方法可以知道用戶何時用應用程序完成文件編輯?

  1. 從服務器
  2. 開放使用的System.Diagnostics.Process相應的應用程序文件下載文件(TXT,DOC,XLS,等等)。開始(文件路徑)
  3. 使用FileSystemWatcher監視文件更改。
  4. 每次文件被更改,將文件上傳到服務器
  5. 繼續監視,直到用戶已經完成編輯文件
  6. 刪除文件
  7. 退出應用程序的本地副本

我被卡在第5步。如何知道用戶是否已完成文件的工作?

我不能依賴被鎖定的文件(記事本不會鎖定txt文件)。

我不能依賴已退出或不存在的進程(例如Notepad ++ for txt文件:該文件可以在選項卡中打開。關閉選項卡後,您已完成編輯文件,但進程爲仍在運行)

有關如何在C#中執行此操作的任何想法/要點?

+0

我明白你的觀點。我想該System.Diagnostics.Process.Start()是默認的編輯器,對不對?在那種情況下,這很困難。我們解決了這個問題,啓動了我們自己的編輯器(或者如果您願意的話,總是記事本),然後等到流程結束,但這可能不是您的解決方案。 – 2011-01-05 11:55:27

+0

關於notepad ++:git用戶通過使用'-multiInst -nosession -notabbar'開關解決了這個問題 - 這種方式使notepad ++被迫創建一個獨立的進程來處理被監控的文件。 – rsenna 2011-01-05 12:15:11

+0

@Kiquenet不是。我已經爲Office類型文件(doc,xls,ppt)進行了鎖監視,這是我的用戶使用最廣泛的文件。 TXT文件只有一小部分文件,最終不是問題。 – 2013-03-04 14:38:46

回答

3

你已經排除了兩種可能的方法檢測正在使用的文件:文件鎖定以及開始退出的過程。

我想到的唯一選擇是在用戶完成編輯時顯示一個對話框請求

編輯:它的價值 - FileZilla有這種類型的行爲。您可以選擇編輯遠程服務器上的文件,下載文件,啓動默認編輯器,(在後臺)顯示「如果您已完成編輯 - 單擊確定」按鈕。
這讓我有機會取消編輯,如果我已經把文件弄糟並保存了。

+3

+1作爲用戶,我寧願應用程序詢問完成時間,而不是猜測 – 2011-01-05 11:58:28

+0

感謝您的對話替代方案......在此主題中查看其他帖子和評論,看起來好像是這是唯一的出路。雖然這並沒有那麼多用戶友好,但我認爲:( – 2011-01-05 16:39:47

0

您可以檢查文件的最後更改日期。當您保存對文件的更改時,將設置此日期。但請注意,由於可以將其設置爲任何值(使用適當的工具),因此該字段不是非常可靠的。

+0

這與問題中的(3)具有相同的效果,即FileSystemWatcher – 2011-01-05 12:01:21

+0

糟糕 - 你是對的,沒有想到這一點。 – 2011-01-05 12:05:53

1

這真的很難做 - 我們嘗試了各種各樣的東西,但從未發現任何萬無一失的東西。如果你知道你已經啓動的程序,理論上,你可以找到它使用的文件句柄,並查看它何時停止使用你感興趣的程序.....但是如果你依靠Windows來解決默認的應用程序甚至發起這變得棘手。

我們將可編輯文件複製到一個以日期命名的臨時文件夾中,並依靠用戶在完成其編輯會話時將其上傳回來。然後我們在應用程序啓動時清理前幾天的文件夾。

相關問題