pywin32之createfile詳解


pywin32是python 中的一個模塊,它包裝了幾乎所有的windows API,可以方便地從Python直接調用,該模塊另一大主要功能是通過Python進行COM編程。

模塊安裝方法:pip install pywin32

pywin32把windows api按照不同的功能分成了幾大類,以下是所有的分類:

mmapfile odbc perfmon servicemanager timer win2kras win32api win32clipboard win32console


win32cred win32crypt win32event win32evtlog win32file win32gui win32help win32inet win32job


win32lz win32net win32pdh win32pipe win32print win32process win32profile win32ras win32security


 win32service win32trace win32transaction win32ts win32wnet winxpgui

 

比如 文件類的API 在win32file里,進程類的API在win32process里

 

下面詳細講解一下win32file模塊里的createfile這個method

說明 文檔中是這么解釋 的:Creates or opens the a file or other object and returns a handle that can be used to access the object. 

翻譯過來的意思就是:創建\打開一個文件,或者其他對象,返回結果是一個可以訪問的一個handle(句柄)

使用方法:

pyhandle= CreateFile(filename,desiredAccess,shareMode,attributes,CreationDisposition,flagAndAttributes,hTemplateFile)

參數解讀:

1、filename 對象的名稱

pywin32通常使用內置的Python Unicode對象,任何使用PyUnicode參數的pywin32/COM函數也會接受Python字符串對象,該對象在傳遞給函數之前會自動使用MBCS編碼進行編碼。注意,相反的情況通常是“不”為真—文檔中記錄的接受字符串的函數必須傳遞一個字符串

2、desiredAccess 訪問對象的類型 int

訪問對象的類型。應用程序可以獲得讀訪問、寫訪問、讀寫訪問或設備查詢訪問。此參數可以是下列值的任意組合。

0:指定對對象的設備查詢訪問。應用程序可以在不訪問設備的情況下查詢設備屬性。

 

GENERIC_READ:指定對對象的讀訪問。可以從文件中讀取數據,並且可以移動文件指針。結合GENERIC_WRITE進行讀寫訪問。

 

GENERIC_WRITE:指定對對象的寫訪問。數據可以寫入文件,文件指針可以移動。結合GENERIC_READ進行讀寫訪問。

3、shareMode 指定如何共享對象的位標志集

如果dwShareMode為0,則不能共享該對象。對對象的后續打開操作將失敗,直到句柄關閉。要共享對象,請使用下列一個或多個值的組合:

FILE_SHARE_DELETE:windowsNT:只有在請求刪除訪問時,對象上的后續打開操作才會成功。

FILE_SHARE_READ:只有在請求讀訪問時,對象上的后續打開操作才會成功。

FILE_SHARE_WRITE:只有在請求寫訪問時,對象上的后續打開操作才會成功。

4、attributes 安全屬性,或者沒有,為None

5、CreationDisposition  指定對存在的文件執行哪個操作,以及在文件不存在時執行哪個操作 int

有關此參數的更多信息,請參見備注部分。該參數必須是以下值之一:

CREATE_NEW:創建一個新文件。如果指定的文件已經存在,則該函數將失敗。

CREATE_ALWAYS:創建一個新文件。如果文件存在,該函數將覆蓋文件並清除現有屬性

OPEN_EXISTING:打開該文件。如果文件不存在,函數將失敗。如果您正在為設備(包括控制台)使用CreateFile函數,請參閱備注部分,以了解為什么應該使用OPEN_EXISTING標志

OPEN_ALWAYS:如果文件存在,則打開該文件。如果該文件不存在,該函數將創建該文件,和dwcreationdispose是CREATE_NEW一樣

TRUNCATE_EXISTING:打開該文件。一旦打開,文件將被截斷,使其大小為零字節。調用進程必須打開至少具有GENERIC_WRITE訪問權限的文件。如果文件不存在,函數將失敗

6、flagsAndAttributes 文件的屬性 int

7、hTemplateFile 指定對模板文件具有GENERIC_READ訪問權限的句柄

模板文件為正在創建的文件提供文件屬性和擴展屬性。在Win95下,這必須是0,否則將引發異常。

 

備注:可以打開以下形式的對象:

files 文件
pipes 管道
mailslots 郵件
communications resources 通訊資源
disk devices (Windows NT only) 磁盤設備
consoles 控制台
directories (open only) 目錄(只讀)

舉個例子:

import win32file,win32con,win32api
import os
def myFileDemo():
testName=os.path.join(win32api.GetTempPath(),"win32file_test_file")#創建一個文件C:\xxxx\Local\Temp\win32file_test_file
if os.path.exists(testName):os.unlink(testName) #如果存在這個目錄,則刪除這個目錄
handle= win32file.CreateFile(testName,
win32file.GENERIC_WRITE,
0,
None,
win32con.CREATE_NEW,
0,
None)
test_data="hello,win32,my happy time啦啦~~~".encode("utf-8")
print("test_data:",test_data)
win32file.WriteFile(handle,test_data)
handle.Close()
handle= win32file.CreateFile(testName,win32file.GENERIC_READ,0,None,win32con.OPEN_EXISTING,0,None)
rc,data=win32file.ReadFile(handle,1024)
handle.Close()
if data == test_data:
print("successfully wrote and read file")
else:
raise Exception("failed to write and read file")
if __name__ == '__main__':
myFileDemo()

運行結果:

successfully wrote and read file

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM