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