C++のCreateFile関数を使用した方法
C++では、ファイルの作成やオープンの際にCreateFile関数が利用できます。そのプロトタイプは次のとおりです。
HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
パラメータの説明:
- lpFileName:作成または開くファイルの名前
- dwDesiredAccess:ファイルへのアクセスモード。読み書き操作の種類を指定する。一般的な値は以下のとおり。
- 読み込みのみのアクセス
- GENERIC_WRITE: アクセスのみ書き込み可能。
- GENERIC_READ | GENERIC_WRITE: 読み書きアクセス。
- dwShareMode:ファイル共有モードで、これは他のプロセスがファイルにアクセスする方法に指定します。一般的な取得値は次のとおりです。
- FILE_SHARE_READ:他のプロセスがファイルをオープンして読み取ることができます。
- ファイル共有書き込み:他のプロセスはファイルに書き込み可能です。
- FILE_SHARE_READ | FILE_SHARE_WRITE:他のプロセスによるファイルの読み書きが可能
- lpSecurityAttributes:ファイルのセキュリティ記述子を指定するセキュリティ属性。
- ファイルの生成方法。ファイルが存在しない場合にどのように生成するかを指定します。一般的な値は次のとおりです。
- CREATE_NEW: ファイルが存在しなければ新規作成し、ファイルが存在すればエラーを返す
- ファイルが存在しない場合は新しいファイルを作成し、ファイルが存在する場合はファイルを上書き: CREATE_ALWAYS
- OPEN_EXISTING:ファイルが存在する場合はファイルを開き、存在しない場合はエラーを返します。
- OPEN_ALWAYS:ファイルが存在すればファイルを開き、ファイルが存在しない場合は新規作成します。
- dwFlagsAndAttributes:ファイルの属性やその他の性質を指定するファイル属性とフラグ。一般的な値として以下があります:
- FILE_ATTRIBUTE_NORMAL:通常ファイル
- ファイルの内容をメモリにキャッシュせずに直接ディスクに書き込む
- 非同期(非ブロッキング)I/O 操作を可能にする FILE_FLAG_OVERLAPPED
- hTemplateFile:拡張属性を指定するファイルのハンドルで、テンプレートファイル。
CreateFile 関数が返す値は、ファイル操作でその後使用する HANDLE 型のハンドルです。
以下に、CreateFile 関数を使用してファイルを作成する例を示します。
#include <Windows.h>
int main() {
LPCWSTR filePath = L"C:\\path\\to\\file.txt"; // 文件路径
// 打开或创建文件
HANDLE hFile = CreateFile(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
// 文件打开或创建失败
return -1;
}
// 写入文件
char buffer[] = "Hello, World!";
DWORD bytesWritten;
if (!WriteFile(hFile, buffer, sizeof(buffer), &bytesWritten, NULL)) {
// 写入文件失败
return -1;
}
// 关闭文件
CloseHandle(hFile);
return 0;
}
この例では、CreateFile 関数によってファイルが作成または開き、WriteFile 関数によってファイルにデータが書き込まれます。最後に、CloseHandle 関数によってファイルのハンドルが閉じられます。