Win32 API檔案讀寫操作

2022-08-21 04:18:13 字數 3395 閱讀 7080

1、檔案的建立和開啟

handle createfile(

lpctstr lpfilename, 

dword dwdesiredaccess, 

dword dwsharemode,         

lpsecurity_attributes lpsecurityattributes,

dword dwcreationdisposition, 

dword dwflagsandattributes, 

handle htemplatefile        

lpfilename:指定用於建立或開啟的物件的名稱;

dwdesiredaccess:指定物件的訪問方式,包括:

0  --指定物件可裝置查詢訪問;

generic_read  --指定物件可讀訪問,可從檔案中讀取資料,並可移動檔案中的指標;

generic_write  --指定物件可寫訪問,可向檔案中寫入資料,並可移動檔案中的指標;

dwsharemode:指定共享方式,包括:

file_share_delete

file_share_read

file_share_write

lpsecurityattributes:指向乙個security_attributes結構的指標,用來確定返回的控制代碼是否能夠被子程序所繼承;

dwcreationdisposition:指定如何建立檔案,包括:

create_new  --建立乙個新檔案,如果檔案已存在,則函式呼叫失敗;

create_always  --建立乙個新檔案,如果檔案已存在,清空該檔案現有屬性

open_existing  --開啟檔案,如果檔案不存在,則函式呼叫失敗

open_always  --如果檔案存在,則開啟檔案;如果檔案不存在,則建立乙個新檔案;

truncate_existing  --開啟檔案,檔案開啟時被擷取使得其大小為0位元組,呼叫該函式必須用generic_write的訪問方式來開啟檔案;如果檔案不存在,則函式呼叫失敗;

dwflagsandattributes:設定檔案屬性和標誌,包括:

file_attribute_archive  --該檔案是存檔檔案

file_attribute_hidden  --該檔案是隱藏檔案

file_attribute_normal  --該檔案沒有其他屬性設定

file_attribute_offline  --檔案的資料已在物理上移動到離線儲存裝置中,不能立即使用

file_attribute_readonly  --該檔案為唯讀檔案

file_attribute_system  --該檔案是作業系統檔案

file_attribute_temporary  --該檔案做暫時儲存使用

file_flag_write_through  --指示系統不經過快取而直接將資料寫入磁碟

file_flag_no_buffering  --指示系統以不帶系統緩衝的方式開啟該檔案

file_flag_random_access  --指示該檔案是隨機訪問方式

file_flag_sequential_scan  --指示該檔案是順序訪問方式

file_flag_backup_semantics  --表明是為備份或儲存操作而開啟或建立該檔案的

file_flag_posix_semantics  --表明將根據posix規則訪問該檔案

file_flag_open_reparse_point  --指定此標誌禁止ntfs再分析點的再分析行為

file_flag_open_no_recall  --表明雖然請求了該檔案的資料,但該資料仍繼續儲存在遠端儲存器中而不應被傳回本地儲存器

htemplatefile:如果開啟乙個已有檔案,則這個引數將被忽略;要使這個引數有效必須滿足:為建立新檔案,給該引數傳遞的檔案控制代碼必須是使用generic_read方式開啟的;

2、檔案的寫入

bool writefile(

handle hfile,                   

lpcvoid lpbuffer,               

dword nnumberofbytestowrite,    

lpdword lpnumberofbyteswritten,

hfile:指定要寫入資料的檔案的控制代碼

lpbuffer:指向包含將要寫入檔案的資料的緩衝區的指標

nnumberofbytestowrite:指明要向檔案中寫入的位元組數

lpnumberofbyteswritten:用來接收實際寫入到檔案中的位元組數

3、檔案的讀取

bool readfile(

handle hfile,               

lpvoid lpbuffer,            

dword nnumberofbytestoread, 

lpdword lpnumberofbytesread,

hfile:指定要讀取其資料的檔案的控制代碼

lpbuffer:指向乙個緩衝區的指標,該緩衝區將接收從檔案中讀取的資料

nnumberofbytestoread:指定從檔案讀取的位元組數

lpnumberofbytesread:用來接收實際讀到的位元組數

例:

//定義乙個控制代碼變數

handle hfile;

//建立檔案

hfile = createfile("1.txt", generic_write, 0, null, create_new, file_attribute_normal, null);

//接收實際寫入的位元組數

dword dwwrites;

//寫入資料

writefile(hfile, "hello world!", strlen("hello world!"), &dwwrites, null);

//關閉檔案控制代碼

closehandle(hfile);

handle hfile;

//開啟檔案

hfile = createfile("1.txt", generic_read, 0, null, open_existing, file_attribute_normal, null);

//接收實際讀取到的資料

char ch[100];

//接收實際讀取到的位元組數

dword dwreads;

//讀取資料

readfile(hfile, ch, 100, &dwreads, null);

//設定字串結束字元

ch[dwreads] = 0;

//關閉開啟的檔案物件的控制代碼

closehandle(hfile);

//顯示讀取到的資料

messagebox(ch);

在C 中讀寫INI檔案 WIN32 API

dllimport kernel32 private static extern long getprivateprofilestring string section,string key,string def,stringbuilder retval,intsize,string filepat...

WIN32 API 檔案裝置IO操作函式解析

createfile用於建立,開啟乙個檔案或者i o裝置。常用的i o裝置包括 檔案,檔案流,目錄,物理磁碟,卷,控制台緩衝區,磁帶驅動器,通訊資源,郵槽和管道。根據所訪問物件以及所指定訪問特性標識的不同,該函式會返回乙個用於訪問所指定物件的控制代碼。其基本語法為 handle winapi cre...

win32 API實現檔案拖拽開啟

在windows中,我們開啟乙個文字檔案後,可以將另乙個文字檔案拖拽進來,從而實現開啟此檔案。那麼這個功能是怎麼實現的呢?經過一下午的實踐,現將具體 分享如下 include define id edit 1 lresult callback wndproc hwnd,uint,wparam,lpa...