1. 程式人生 > >Windows API:檔案操作

Windows API:檔案操作



    LPCTSTR lpFileName,

    DWORD dwDesiredAccess,

    DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

    DWORD dwCreationDisposition,

    DWORD dwFlagsAndAttributes,

    HANDLE hTemplateFile

);

/*

typedef unsigned long DWORD;

如果執行成功 則返回檔案控制代碼

如果執行失敗 返回 INVALID_HANDLE_VALUE

lpFileName: 檔名 e.g."C:\\regedit.exe"

dwDesiredAccess: GENERIC_READ 允許對裝置進行讀訪問 GENERIC_WRITE 允許對裝置進行寫訪問

dwShareMode: 

0 不共享 

FILE_SHARE_DELITE刪除訪問請求則開啟物件成功 

FILE_SHARE_READ 請求讀訪問則開啟物件成功 

FILE_SHARED_WRITE 請求寫訪問則開啟物件成功

lpSecurityAttributes: 指向一個SECURITY_ATTRIBUTES結構的指標 定義了檔案的安全特性(如果作業系統支援的話)可以為NULL

dwCreationDisposition: 下述常數之一:

CREATE_NEW 建立檔案 如檔案存在則會出錯

CREATE_ALWAYS 建立檔案 會改寫前一個檔案

OPEN_EXISTING 檔案必須已經存在 由裝置提出要求

OPEN_ALWAYS 如檔案不存在則建立它

TRUNCATE_EXISTING 將現有檔案縮短為零長度

dwFlagsAndAttributes: 一個或多個下述常數

FILE_ATTRIBUTE_ARCHIVE 標記歸檔屬性

FILE_ATTRIBUTE_COMPRESSED 將檔案標記為已壓縮,或者標記為檔案在目錄中的預設壓縮方式

FILE_ATTRIBUTE_NORMAL 預設屬性

FILE_ATTRIBUTE_HIDDEN 隱藏檔案或目錄

FILE_ATTRIBUTE_READONLY 檔案為只讀

FILE_ATTRIBUTE_SYSTEM 檔案為系統檔案

FILE_FLAG_WRITE_THROUGH 作業系統不得推遲對檔案的寫操作

FILE_FLAG_OVERLAPPED 允許對檔案進行重疊操作

FILE_FLAG_NO_BUFFERING 禁止對檔案進行緩衝處理。檔案只能寫入磁碟卷的扇區塊

FILE_FLAG_RANDOM_ACCESS 針對隨機訪問對檔案緩衝進行優化

FILE_FLAG_SEQUENTIAL_SCAN 針對連續訪問對檔案緩衝進行優化

FILE_FLAG_DELETE_ON_CLOSE 關閉了上一次開啟的控制代碼後,將檔案刪除。特別適合臨時檔案

也可在Windows NT下組合使用下述常數標記:

SECURITY_ANONYMOUS SECURITY_IDENTIFICATION SECURITY_IMPERSONATION SECURITY_DELEGATION SECURITY_CONTEXT_TRACKING SECURITY_EFFECTIVE_ONLY

hTemplateFile: 為一個檔案或裝置控制代碼 表示按這個引數給出的控制代碼為模板建立檔案(就是將該控制代碼檔案拷貝到lpFileName指定的路徑 然後再開啟)它將指定該檔案的屬性擴充套件到新建立的檔案上面 這個引數可用於將某個新檔案的屬性設定成與現有檔案一樣 並且這樣會忽略dwAttrsAndFlags 通常這個引數設定為NULL 為空表示不使用模板 一般為空

疑問:第二個和第三個引數的區別?

*/

BOOLCopyFile(

LPCTSTR lpExistingFileName,

LPCTSTR lpNewFileName,

BOOL bFailIfExists 

);

/*

返回值BOOL true表示成功 false表示失敗會設定GetLastError

lpExistingFileName原始檔名

lpNewFileName目標檔名

bFailIfExists如果設為TRUE那麼一旦目標檔案已經存在則函式呼叫會失敗否則目標檔案被改寫

*/

LPCTSTR lpExistingFileName,

LPCTSTR lpNewFileName

);

/*

移動一個存在的檔案或者目錄(包括子目錄)

成功呼叫 返回true

失敗呼叫 返回false

lpExistingFileName一個存在的檔案或者資料夾字串指標

lpNewFileName一個還沒存在的檔案或者資料夾的字串指標

*/

BOOL DeleteFile(LPCSTR lpFileName);

BOOL ReadFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped

);

/*

FILE_FLAG_OVERLAPPED 允許對檔案進行重疊操作

呼叫成功 返回true

呼叫不成功 返回為false

hFile: 需要讀入資料的檔案指標 這個指標指向的檔案必須是GENERIC_READ訪問屬性的檔案。

lpBuffer: 接收資料的緩衝區

nNumberOfBytesToRead: 指定要讀取的位元組數

pNumberOfBytesRead: 指向一個DWORD型別變數的指標 用來接收讀取的位元組 如果下一個引數為NULL 那麼一定要傳入這個引數

lpOverlapped: OVERLAPPED結構體指標 如果檔案是以FILE_FLAG_OVERLAPPED方式開啟的話 那麼這個指標就不能為NULL 如果檔案開啟方式沒有指明FILE_FLAG_OVERLAPPED 當程式呼叫成功時 它將實際讀出檔案的位元組數儲存到lpNumberOfBytesRead指明的地址空間

疑問:最後2個引數有且只有一個為NULL?

*/

HANDLE hFile,

LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORDlpNumberOfBytesWritten,

LPOVERLAPPEDlpOverlapped

);

/*

hFile: 需要寫入資料的檔案指標 這個指標指向的檔案必須是GENERIC_WRITE訪問屬性的檔案

其它引數與ReadFile相同

*/

BOOL CloseHandle(HANDLE hObject);

/*

關閉一個核心物件 包括檔案 檔案對映 程序 執行緒等

執行成功返回true 執行失敗返回false

*/

相關推薦

Windows API:檔案操作

     LPCTSTR lpFileName,     DWORD dwDesiredAccess,     DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,     DWORD dwCr

C/C++ Windows API——檔案/資料夾建立、刪除、移動及檢視時間

// FileOperationDemo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <Windows.h>

Windows DIB檔案操作詳解-1.DIB的讀入、儲存和顯示

DIB(裝置無關點陣圖)是儲存在磁碟上的點陣圖檔案,可以從磁碟讀到記憶體中或從記憶體儲存到磁碟上,它的磁碟檔案結構是標準化的,在Linux、Unix及Windows上都可以以同樣效果顯示。點陣圖是最接近硬體的影象格式,Windows顯示的核心是點陣圖,它的SDK API專門

記錄Windows檔案操作記錄

在Windows下,有時會遇到有些檔案或者資料夾丟失的問題,不知道是誰,什麼時候,哪個程式把檔案或者資料夾刪除。特別是開發者遇到自己用於儲存的檔案丟失,不知是自己程式導致還是其他程式或者病毒導致。此時採用下面的方法,可以使用Windows日誌,記錄檔案或者資料夾的操作記錄。

Windows API實現檔案操作

下面是windows中提供的對於檔案進行操作的API函式及其功能: Windows API函式 功能 CloseHandle 關閉一個核心物件。其中包括檔案、檔案對映、程序、執行緒、安全和同步物件等。涉及檔案處理時,這個函式通常與vb的close命令相似。應儘可能的使

雙系統如何在windows系統下操作ubuntu下的檔案

我裝有Windows和Ubuntu的雙系統情況,需要在windows下訪問ubuntu中的檔案,怎麼辦呢? 原因:Windows 是無法識別Linux 的檔案系統的,通常都會顯示“未格式化”,而Linux 的髮型版本Ubuntu 卻可以識別Windows 的檔案系統。Linu

python 檔案操作的相對路徑和絕對路徑(windows)

1.相對路徑 windows  '.\'表示當前路徑 with open(r'.\db\123.txt','w',encoding='utf-8') as f: f.write('abc')   2.絕對路徑 2.1 直接加死絕對路徑 with open('c:

MFC操作串列埠,詳細 複製程式碼(ActiveX控制元件和Windows API函式)

/******************************************************************* *******函式功能:開啟串列埠裝置連結 *******函式名稱:OpenComm *******輸入引數:無 *******輸出引數:無 ***

C#對Xml的檔案操作,進階到xml轉成Api輸出並轉Json然後轉類

目的:實現Api對Xml的使用 使用方法: 訪問介面http://localhost:3633/api/values/ 為輸出Xml 訪問介面http://localhost:3633/api/values/5 為輸出類 遇到問題: 輸出的Xml: <

Windows system 在python檔案操作時的路徑表示方法

file_path =(r'i:\vacpy\ch10\pi_digits.txt') #將檔案路徑儲存在變數file_path中with open (file_path) as file_object: contents = file_object.read() print(

安卓檔案操作api與路徑對應關係整理

一、簡述 在安卓開發中,經常會用到一些需要操作檔案的需求,自己一直對api和檔案路徑相關的對應關係模糊不清楚,今天有時間來整理記錄下,免得以後忘記了。 ps:由於手裡沒有可以裝SD卡的機器,所以以

《精通Windows API-函式、介面、程式設計例項》——第4章檔案系統

第4章檔案系統 4.2 磁碟和驅動器管理 檔案系統的基本概念: 包括磁碟分割槽,卷,目錄,檔案物件,檔案控制代碼,檔案對映 1.磁碟分割槽: 物理磁碟,邏輯磁碟 2.卷: 也稱邏輯驅動器,是NTFS,FAT32等檔案系統組織結構的最高層. 卷是

【電腦常用操作記錄】調整和刪除windows休眠檔案Hiberfil.sys釋放C盤(轉載)

【重要指令--(管理員命令提示符)powercfg -h -size 70  即可將這臺計算機的 C:\Hiberfil.sys 減小為70%,即 2.8GB)】 Hiberfil.sys 是 Windows 休眠功能(Windows Hibernation)將記憶

判斷檔案、目錄是否存在:C、C++、Windows API、 boost

一、判斷檔案是否存在 #ifdef WIN32 #include <io.h>                      //C (Windows)    access #else #include <unistd.h>           

windows API遞迴遍歷資料夾下所有檔案

1.網上有些程式碼有問題,改進如下 #include <stdio.h> #include<windows.h> #include<iostream> #inclu

Linux和Windows檔案和目錄的相關屬性及操作

我們知道C/C++都提供了標準的檔案I/O庫以便我們對檔案進行讀寫。但我們無法通過標準的I/O庫對檔案系統進行更進一步的操作。因為這設計到具體作業系統中檔案系統的設計。在Linux和Windows程

C++ Windows API 讀寫INI檔案

BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI檔案中的一個欄位名[節名]可以有很多個節名 LPCTSTR lpKeyName, // lpAppName 下的一個鍵名,也就是裡面具體的變數名 LPCTSTR lpStri

windows api 之複製檔案到指定目錄和獲得系統資訊

#include <iostream> #include <WINDOWS.H> using namespace std; void copySelf() { char szSelfName[MAX_PATH] ; char szDestNa

使用windows API播放聲音檔案(wav、mp3)等

軟體:      vs2010 工程:     控制檯程式(空工程) 程式碼如下: /* mciSendCommand播放音樂,呼叫簡單,功能強大,但是它只能同時播放一個 檔案,而有的專案中需要同時播放幾個檔案,實現混音效果,這時就要使用 DirectSound或者其它庫

C++下載指定Url網路地址上的檔案-Windows Api

#include <stdio.h> #include <Windows.h> #include <wininet.h> #pragma comment (li