在大多數應用中都要知道從頁面打開的Word或WPS文件是否已經關閉,通常的方法有以下幾種:
方法一:
由于當前打開的文件是獨占模式打開的( it外包 ),所以可以使用移動文件的方法進行判斷,如:
將文件從當前文件夾移動到當前文件夾如果出錯則改文件在使用,判斷結果為當前文件沒有關閉,但是這種方法的判斷不一定正確,如果有一個WORD或WPS進行在后臺運行,而且它也在用這個文件那么這種方法無疑是會有問題的。
方法二:
使用系統函數進行判斷用windowsAPI進行判斷,具體思路可以獲取當前打開窗口的句柄,判斷這個句柄是否存在來進行判斷,但是這種方法也會有一定的缺陷。
方法三:
使用這種方式的思路是不直接對文件進行判斷而是采用間接的方式進行判斷( 電腦維護 ),使用WORD或WPS插件開發方式,開發一個關閉狀態寫入插件。該插件的功能是如果當前關閉的文件是要進行判斷的文件則在關閉文件的時候將該狀態寫入到一個XML狀態文件中如:
改文件的信息可以如下:
<?xml version="1.0" encoding="UTF-8"?>
<FileInfo>
<File>
<FileName>C:/Documents and Settings/Administrator/桌面test1.doc</FileName>
<IsClose>false</IsClose>
<IsSaveAs>false</IsSaveAs>
</File>
<File>
<FileName>C:/Documents and Settings/Administrator/桌面/test2.wps</FileName>
<IsClose>True</IsClose>
<IsSaveAs>false</IsSaveAs>
</File>
</FileInfo>
其中紅色部分為當前文件是否關閉的狀態值,在控件調用部分可以使用一個計時器進行讀取這個狀態,直到關閉。
其中WPS或WORD插件的主要功能就是在關閉的時候通過Application.FullName和當前XML狀態文件中的FileName進行對比如果文件名和路徑相同則將改對應的IsClose屬性設置為True.這時候控件部分在讀取這個值的時候就會判斷到這個文件已經關閉了從而進行下一步的處理。
在這個狀態文件中大家可能看到文件名FileName的寫入使用的是絕對路徑,因為如果只是寫入文件名判斷會出錯:如,我們要判斷的是C:/1.wps文件是否已經關閉而現在又打開D:/1.wps
,很明顯在只有文件名記錄的情況下,這種上述這種情況會出錯( 服務器維護 ),所以采用了絕對路徑和文件名的判斷這樣判斷會更準確一些。
我個人還是比較看好第三種方法,原因是這種方式將需要判斷的文件和判斷方法進行分離,使用插件效果會較好。
具體代碼就不寫在這兒了!!
相關文章