判斷乙個檔案是否正在被使用

2021-04-17 21:21:21 字數 3873 閱讀 7087

createfile函式的原型如下

handle createfile(

lpctstr lpfilename,    //指向檔名的指標

dword dwdesiredaccess,    //訪問模式(寫/讀)

dword dwsharemode,    //共享模式

lpsecurity_attributes lpsecurityattributes, //指向安全屬性的指標

dword dwcreationdisposition,   //如何建立

dword dwflagsandattributes,   //檔案屬性

handle htemplatefile    //用於複製檔案控制代碼

);下面是引數的說明

lpfilename

指向乙個空結尾字串。該引數指定了用於建立或開啟控制代碼的物件。

如果lpfilename的物件是乙個路徑,則有乙個最大字元數的限制。不能超過常量(max_path).這個限制指示了createfile函式如何解析

路徑.dwdesiredaccess

指定物件的訪問方式,程式可以獲得讀訪問權,寫訪問權,讀寫訪問權或者是詢問裝置("device query") 訪問權.

這個引數可以是下列值的任意組合

0指定詢問訪問權.程式可以在不直接訪問裝置的情況下查詢裝置的屬性.

generic_read

指定讀訪問權.可以從檔案中讀取資料,並且移動檔案指標.可以和generic_write組合成為"讀寫訪問權".

generic_write

指定寫訪問權.可以從檔案中寫入資料,並且移動檔案指標.可以和generic_read組合成為"讀寫訪問權".

dwsharemode

設定位標誌指明物件如何共享.如果引數是0, 物件不能夠共享. 後續的開啟物件的操作將會失敗,直到該物件的控制代碼關閉.

使用乙個或多個下列值的組合來共享乙個物件.

file_share_delete

windows nt:後續的僅僅請求刪除訪問權的開啟操作將會成功.

file_share_read

後續的僅僅請求讀訪問權的開啟操作將會成功.

file_share_write

後續的僅僅請求寫訪問權的開啟操作將會成功.

lpsecurityattributes

指向乙個 security_attributes 結構的指標用於確定如何在子程序中繼承這個控制代碼.如果這個引數是null,則該控制代碼不可繼承.

dwcreationdisposition

指定當檔案存在或者不存在時如何動作。關於這個引數更多的資訊,參考批註部分。這個引數必須是乙個或多個下列值。

create_new

建立乙個新檔案. 如果該檔案已經存在函式則會失敗.

create_always

建立乙個新檔案.如果該檔案已經存在,函式將覆蓋已存在的檔案並清除已存在的檔案屬性

open_existing

開啟乙個檔案,如果檔案不存在函式將會失敗.

如查你使用createfile函式為裝置裝載控制台.請檢視批註中的"為什麼使用open_existing標誌"的部分.

open_always

如果檔案存在,開啟檔案. 如果檔案不存在,並且引數中有create_new標誌,則建立檔案.

truncate_existing

開啟乙個檔案,每次開啟,檔案將被截至0位元組.呼叫程序必須用generic_write訪問模式打

開檔案.如果檔案不存在則函式就會失敗.

dwflagsandatributes

為檔案指定屬性和標誌位

該引數可以接收下列屬性的任意組合.除非其它所有的檔案屬性忽略file_attribute_normal.

file_attribute_archive

檔案將被存檔,程式使用此屬性來標誌檔案去備份或移除

file_attribute_hidden

檔案被隱藏,它不會在一般資料夾列表中被裝載.

file_attribute_normal

檔案沒有被設定任何屬性.

的非同步操作.然而,一些i/o操作將會執行得長一些,因為資料沒有控制在快取中.當使用file_flag_no_buffering開啟檔案進行工作時,程式

必須達到下列要求:

檔案的訪問開頭的位元組偏移量必須是扇區尺寸的整倍數.

檔案訪問的位元組數必須是扇區尺寸的整倍數.例如,如果扇區尺寸是512位元組程式就可以讀或者寫512,1024或者2048位元組,但不能夠是

335,981或者7171位元組.

進行讀和寫操作的位址必須在扇區的對齊位置,在記憶體中對齊的位址是扇區尺寸的整倍數.

乙個將緩衝區與扇區尺寸對齊的途徑是使用virtualalloc函式. 它分配與作業系統記憶體頁大小的整倍數對齊的記憶體位址.因為記憶體頁

尺寸和扇區尺寸--2都是它們的冪.

這塊內存在位址中同樣與扇區尺寸大小的整倍數對齊.       

程式可以通過呼叫getdiskfreespace來確定扇區的尺寸.

file_flag_random_access

指定檔案是隨機訪問,這個標誌可以使系統優化檔案的緩衝.

file_flag_sequential_scan

指定檔案將從頭到尾連續地訪問.這個標誌可以提示系統優化檔案緩衝. 如果程式在隨機訪問檔案中移動檔案指標,優化可能不會

發生;然而,正確的操作仍然可以得到保證

指定這個標誌可以提高程式以順序訪問模式讀取大檔案的效能, 效能的提高在許多程式讀取一些大的順序檔案時是異常明顯的.

但是可能會有小範圍的位元組遺漏.

file_share_delete,後續的開啟檔案的請求將會失敗.

file_flag_backup_semantics

windows nt:指示系統為檔案的開啟或建立執行乙個備份或恢復操作. 系統保證呼叫程序忽略檔案的安全選項,倘若它必須有乙個

特權.則相關的特權則是se_backup_name和se_restore_name.

你也可以使用這個標誌獲得乙個資料夾的控制代碼,乙個資料夾控制代碼能夠象乙個檔案控制代碼一樣傳給某些win32函式。

file_flag_posix_semantics

指明檔案符合posix標準.這是在ms-dos與16位windows下的標準.

file_flag_open_reparse_point

指定這個標誌制約ntfs分割槽指標.該標誌不能夠和creat_always一起使用.

file_flag_open_no_recall

指明需要檔案資料,但是將繼續從遠端儲存器中接收.它不會將資料存放在本地儲存器中.

這個標誌由遠端儲存系統或等級儲存管理器系統使用.

htemplatefile

為generic_read訪問的模式指定乙個控制代碼到模板檔案.模板檔案在檔案開始建立後提供檔案屬性和擴充套件屬性.

return values

返回值如果函式成功,返回乙個開啟的指定檔案的控制代碼.如果指定檔案在函式呼叫前已經存在並且dwcreation引數是create_always 或者

open_always,呼叫getlasterror就會返回error_already_exists(表示函式成功). 如果函式檔案在呼叫前不存在則會返回0.

如果函式失敗,返會值會是invalid_handle_value. 更多的錯誤資訊可以呼叫getlasterror來獲得.

handle hfile;

hfile 

=createfile(fullfilepath, generic_read

|generic_write, 

0, null, open_existing, file_attribute_normal, 0);

if(hfile 

==invalid_handle_value)

closehandle(hfile);

如何判斷乙個檔案是否正在被使用

這段時間在做檔案操作方面的工作.雖然看似簡單,實際卻很煩瑣,容易出現問題,加之測試也不是很方便.有時要向檔案寫入東西,在開啟檔案前不單要判斷檔案是否存在,還要判斷檔案是否被別人使用.如下 1using system 2using system.collections.generic 3using s...

C 判斷檔案是否正在被使用

生成檔案的時候,如果該資料夾下的同名檔案被開啟 或者被使用 如果這時再生成乙個同名檔案,則會提示檔案正在被占用。解決方法有兩個,乙個是儲存的檔名改成該資料夾下不存在的 隨機數之類的xxoo都行,只要不存在就可以了 當然這裡指的是該同名檔案是被使用,如果該同名檔案不開啟,生成檔案的時候就直接將其覆蓋了...

C 判斷乙個檔案是否正在被開啟占用

方法1 開啟看看就知道了 判斷乙個檔案是否正在使用函式 開啟看看就知道了 將要判斷檔案的檔名 bool public static bool isfileinuse string filename catch exception e finally return inuse true表示正在使用,f...