在.net中檢測是很好實現的 ,可以利用 異常處理機制:故意對檔案進行操作,如果丟擲異樣,則可以根據異常資訊判斷出是否被其它程序占用,常用的有:
1、try
2、_lopen(filen, of_readwrite | of_share_deny_none) 檢測返回值
3、try
第1,第3 可以通過丟擲的異常來判斷;
附上第2種方法的完整**如下:
c#判斷檔案是否被開啟占用
using system.io;
using system.runtime.interopservices;
[dllimport("kernel32.dll")]
public static extern intptr _lopen(string lppathname, int ireadwrite);
[dllimport("kernel32.dll")]
public static extern bool closehandle(intptr hobject);
public const int of_readwrite = 2;
public const int of_share_deny_none = 0x40;
public readonly intptr hfile_error = new intptr(-1);
private void button1_click(object sender, eventargs e)
intptr vhandle = _lopen(vfilename, of_readwrite | of_share_deny_none);
if (vhandle == hfile_error)
closehandle(vhandle);
messagebox.show("沒有被占用!");
}
檢視檔案是否被其他程序訪問
專案中寫了乙個穿網閘檔案傳輸程式,定期掃瞄指定資料夾,並將檔案傳輸至網閘對側。但在使用過程中發現部分檔案經常被截斷傳輸,實際上程式中對該問題已經做了處理,linux系統使用lsof命令可以直接插到該檔案當前有沒有被寫入,windows系統使用嘗試重新命名檔案方式來確定檔案有沒有被占用。但實際應用中在...
C 讀取被程序占用的檔案
最近所做的乙個專案中,需要實現乙個讀取日誌檔案的功能,開始我使用的讀取日誌檔案的方法如下 在讀取歷史日誌檔案時,沒有問題,但是在讀取當前正在寫的日誌檔案時,就出現問題了。出現以下錯誤 檔案 f autoupdater log logfile20090422.txt 正由另一程序使用,因此該程序無法訪...
C 讀取被程序占用的檔案
檔案 d log cargoabc logfilecargoabc.txt 正由另一程序使用,因此該程序無法訪問該檔案。logfilecargoabc.txt是乙個日誌檔案,不定時都可能由另外的程式對它進行日誌記錄寫入操作。今需要對日誌檔案讀取出來,顯示在日誌查詢裡,需要用到了io流。1 files...