HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );lpFileName には作成、またはオープンするファイルの名前(パス)を指定します
| 定数 | 解説 | 
|---|---|
| 0 | デバイスの属性を問い合わせます | 
| GENERIC_READ | 読み取りアクセスです データの読み取りとファイルポインタの移動ができます 読み書きアクセスをするには、GENERIC_WRITE と組み合わせて指定します  | 
| GENERIC_WRITE | 書き込みアクセスです データの書き込みとファイルポインタの移動ができます 読み書きアクセスをするには、GENERIC_READ と組み合わせて指定します  | 
| 定数 | 解説 | 
|---|---|
| 0 | このオブジェクトは共有しない ハンドルがクローズされるまでこのオブジェクトのオープン操作は失敗します  | 
| FILE_SHARE_DELETE | Windows NT のみ 後続のオープン操作で削除アクセスが要求された場合 そのオープンを許可します  | 
| FILE_SHARE_READ | 後続のオープン操作で読み取りアクセスが要求された場合 そのオープンを許可します  | 
| FILE_SHARE_WRITE | 後続のオープン操作で書き込みアクセスが要求された場合 そのオープンを許可します  | 
| 定数 | 解説 | 
|---|---|
| CREATE_NEW | 新しいファイルを作成します 指定ファイルがすでに存在している場合、関数は失敗します  | 
| CREATE_ALWAYS | 新しいファイルを作成します 指定ファイルがすでに存在している場合、そのファイルは上書きされます  | 
| OPEN_EXISTING | ファイルをオープンします 指定ファイルが存在していない場合、関数は失敗します デバイス (コンソールも含む) 上で CreateFile 関数を使う場合は このフラグを指定しなければなりません  | 
| OPEN_ALWAYS | ファイルをオープンします 指定ファイルが存在していない場合、関数は新しいファイルを作成します。  | 
| TRUNCATE_EXISTING | ファイルをオープンし、ファイルのサイズを 0 バイトにします 指定ファイルが存在していない場合、関数は失敗します dwDesiredAccess パラメータで 少なくとも GENERIC_WRITE を指定しなければなりません  | 
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
		PSTR lpCmdLine , int nCmdShow) {
	HANDLE hFile;
	hFile = CreateFile(
		lpCmdLine , GENERIC_READ , 0 , NULL ,
		CREATE_NEW , FILE_ATTRIBUTE_NORMAL , NULL
	);
	if (hFile == INVALID_HANDLE_VALUE) {
		MessageBox(
			NULL , TEXT("ファイルを作成できませんでした") ,
			TEXT("エラー") , MB_OK
		);
		return 1;
	}
	CloseHandle(hFile);
	return 0;
}
このプログラムは、コマンドライン引数で得た文字列のファイルを生成します#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
		PSTR lpCmdLine , int nCmdShow) {
	HANDLE hFile;
	TCHAR strFileSize[1024];
	hFile = CreateFile(
		lpCmdLine , GENERIC_READ , 0 , NULL ,
		OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL
	);
	if (hFile == INVALID_HANDLE_VALUE) {
		MessageBox(
			NULL , TEXT("ファイルを開けませんでした") ,
			TEXT("エラー") , MB_OK
		);
		return 1;
	}
	wsprintf(strFileSize , "%s = %dByte" , lpCmdLine , GetFileSize(hFile , NULL));
	MessageBox(NULL , strFileSize , TEXT("ファイル情報") , MB_OK);
	CloseHandle(hFile);
	return 0;
}
コマンドラインから取得したファイル名のファイルを開き| 定数 | 解説 | 
|---|---|
| FILE_TYPE_UNKNOWN | 種類は不明です | 
| FILE_TYPE_DISK | ディスクファイルです | 
| FILE_TYPE_CHAR | LPT デバイスやコンソールといった文字ファイルです | 
| FILE_TYPE_PIPE | 名前付きまたは名前なしパイプです | 
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
		PSTR lpCmdLine , int nCmdShow) {
	if (!DeleteFile(lpCmdLine))
		MessageBox(
			NULL , TEXT("削除できません") ,
			NULL , MB_OK
		);
	return 0;
}
コマンドライン引数で指定したファイルを削除するプログラムですBOOL CopyFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists );lpExistingFileName にはコピーする既存のファイル名を
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
		PSTR lpCmdLine , int nCmdShow) {
	int param2;
	for (param2 = 0 ; *(lpCmdLine + param2) ; param2++)
		if (*(lpCmdLine + param2) == ' ') break;
	*(lpCmdLine + param2) = 0;
	param2++;
	if (!CopyFile(lpCmdLine , lpCmdLine + param2 , TRUE))
		MessageBox(
			NULL , TEXT("ファイルをコピーできません") ,
			NULL , MB_OK
		);
	return 0;
}
このプログラムは、コマンドライン引数を二つ受け取りますHANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );ファイルを作成、または開きます
| 定数 | 解説 | 
|---|---|
| 0 | デバイスの属性を問い合わせます | 
| GENERIC_READ | 読み取りアクセスです データの読み取りとファイルポインタの移動ができます 読み書きアクセスをするには、GENERIC_WRITE と組み合わせて指定します  | 
| GENERIC_WRITE | 書き込みアクセスです データの書き込みとファイルポインタの移動ができます 読み書きアクセスをするには、GENERIC_READ と組み合わせて指定します  | 
| 定数 | 解説 | 
|---|---|
| 0 | このオブジェクトは共有しない ハンドルがクローズされるまでこのオブジェクトのオープン操作は失敗します  | 
| FILE_SHARE_DELETE | Windows NT のみ 後続のオープン操作で削除アクセスが要求された場合 そのオープンを許可します  | 
| FILE_SHARE_READ | 後続のオープン操作で読み取りアクセスが要求された場合 そのオープンを許可します  | 
| FILE_SHARE_WRITE | 後続のオープン操作で書き込みアクセスが要求された場合 そのオープンを許可します  | 
| 定数 | 解説 | 
|---|---|
| CREATE_NEW | 新しいファイルを作成します 指定ファイルがすでに存在している場合、関数は失敗します  | 
| CREATE_ALWAYS | 新しいファイルを作成します 指定ファイルがすでに存在している場合、そのファイルは上書きされます  | 
| OPEN_EXISTING | ファイルをオープンします 指定ファイルが存在していない場合、関数は失敗します デバイス (コンソールも含む) 上で CreateFile 関数を使う場合は このフラグを指定しなければなりません  | 
| OPEN_ALWAYS | ファイルをオープンします 指定ファイルが存在していない場合、関数は新しいファイルを作成します。  | 
| TRUNCATE_EXISTING | ファイルをオープンし、ファイルのサイズを 0 バイトにします 指定ファイルが存在していない場合、関数は失敗します dwDesiredAccess パラメータで 少なくとも GENERIC_WRITE を指定しなければなりません  | 
| 定数 | 解説 | 
|---|---|
| 属性 | |
| FILE_ATTRIBUTE_ARCHIVE | アーカイブファイルです この属性は、ファイルのバックアップや 削除のためのマークとして使われます  | 
| FILE_ATTRIBUTE_ COMPRESSED | 圧縮ファイルまたは圧縮ディレクトリです 圧縮ディレクトリ内に新しく作られるファイル またはディレクトリは デフォルトで圧縮状態になります  | 
| FILE_ATTRIBUTE_HIDDEN | 隠しファイルです | 
| FILE_ATTRIBUTE_NORMAL | とくに属性はありません 単独で指定します  | 
| FILE_ATTRIBUTE_OFFLINE | ファイルのデータは、すぐには利用できません ファイルのデータが別のオフラインの 記憶装置に移されていることを示します  | 
| FILE_ATTRIBUTE_READONLY | 読み取り専用です | 
| FILE_ATTRIBUTE_SYSTEM | オペレーティングシステムのファイルの一部です または、オペレーティングシステム専用のファイルです  | 
| FILE_ATTRIBUTE_TEMPORARY | テンポラリファイルです | 
| フラグ | |
| FILE_FLAG_WRITE_THROUGH | キャッシュに書き込まれたデータを そのまま直接ディスクに書き込むようにします  | 
| FILE_FLAG_OVERLAPPED | 時間のかかる処理に対して ERROR_IO_PENDING を返すようにします 処理が終了すると、イベントはシグナル状態に設定されます このフラグを指定したときは、ReadFile 関数や WriteFile 関数で OVERLAPPED 構造体を指定しなければなりません  | 
| FILE_FLAG_NO_BUFFERING | バッファやキャッシュを使用せずに ファイルをオープンするようにします 場合によっては、パフォーマンスが向上します このフラグを指定したときは、次の条件を満たさなければなりません 1 ファイルアクセスの開始オフセットを ボリュームのセクタサイズの整数倍にしなければなりません 2 ファイルのアクセスのバイト数を ボリュームのセクタサイズの整数倍にしなければなりません セクタサイズが 512 バイトの場合 512 バイト、1024 バイト……の読み書きはできますが 335 バイト、981 バイトなどの読み書きはできません 3 読み書き操作用のバッファのアドレスを ボリュームのセクタサイズの整数倍に整列しなければなりません 3 番目の条件を満たすには、VirtualAlloc() 関数を利用すると便利です VirtualAlloc() は、確保するメモリを (セクタサイズではありませんが) ページサイズの整数倍に整列します ボリュームのセクタサイズを求めるには GetDiskFreeSpace() 関数を使います  | 
| FILE_FLAG_RANDOM_ACCESS | ファイルをランダムアクセスすることをシステムに示します システムは、この指定をファイルのキャッシングを 最適化するヒントとして使用します  | 
| FILE_FLAG_SEQUENTIAL_SCAN | ファイルをシーケンシャルにアクセスすることをシステムに示します システムは、この指定をファイルのキャッシングを 最適化するヒントとして使用します このフラグを指定しても ランダムアクセスができなくなるわけではありません  | 
| FILE_FLAG_DELETE_ON_CLOSE | ファイルのハンドルがクローズされたら そのファイルを削除するようにします  | 
| FILE_FLAG_BACKUP_SEMANTICS | Windows NT バックアップまたは復元操作のために ファイルをオープンまたは作成します  | 
| FILE_FLAG_POSIX_SEMANTICS | POSIX の規則に従ってファイルにアクセスします このフラグを使って作成したファイルには MS-DOS/Windows アプリケーションからはアクセスできません  | 
| 定数 | 解説 | 
|---|---|
| SECURITY_ANONYMOUS | 匿名 (Anonymous) 偽装レベルでクライアントを偽装します | 
| SECURITY_IDENTIFICATION | 確認 (Identification) 偽装レベルでクライアントを偽装します | 
| SECURITY_IMPERSONATION | 偽装 (Impersonation) 偽装レベルでクライアントを偽装します | 
| SECURITY_DELEGATION | 代理 (Delegation) 偽装レベルでクライアントを偽装します | 
| SECURITY_CONTEXT_TRACKING | セキュリティトラッキングモードが動的であることを指定します このフラグを指定しない場合 セキュリティトラッキングモードは静的です  | 
| SECURITY_EFFECTIVE_ONLY | クライアントのセキュリティコンテキストのうち 有効になっている部分だけをサーバーで利用できるようにします このフラグを指定しない場合は、すべての部分が利用できます  | 
| 定数 | 解説 | 
|---|---|
| FILE_TYPE_UNKNOWN | 種類は不明です | 
| FILE_TYPE_DISK | ディスクファイルです | 
| FILE_TYPE_CHAR | LPT デバイスやコンソールといった文字ファイルです | 
| FILE_TYPE_PIPE | 名前付きまたは名前なしパイプです | 
BOOL CopyFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists );既存ファイルをコピーします