C++中的CreateFile函數(shù)怎么使用

c++
小億
118
2023-09-27 20:11:00

在C++中,CreateFile函數(shù)可以用來(lái)創(chuàng)建或打開(kāi)一個(gè)文件。它的原型是:

HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);

參數(shù)說(shuō)明:

  • lpFileName:要?jiǎng)?chuàng)建或打開(kāi)的文件的名稱。

  • dwDesiredAccess:文件的訪問(wèn)模式,指定讀寫操作的類型。常見(jiàn)的取值有:

  • GENERIC_READ:只讀訪問(wèn)。

  • GENERIC_WRITE:只寫訪問(wèn)。

  • GENERIC_READ | GENERIC_WRITE:讀寫訪問(wèn)。

  • dwShareMode:文件共享模式,指定其他進(jìn)程可以如何訪問(wèn)文件。常見(jiàn)的取值有:

  • FILE_SHARE_READ:其他進(jìn)程可以讀取文件。

  • FILE_SHARE_WRITE:其他進(jìn)程可以寫入文件。

  • FILE_SHARE_READ | FILE_SHARE_WRITE:其他進(jìn)程可以讀寫文件。

  • lpSecurityAttributes:安全屬性,用于指定文件的安全描述符。

  • dwCreationDisposition:文件的創(chuàng)建方式,指定當(dāng)文件不存在時(shí)應(yīng)該如何創(chuàng)建。常見(jiàn)的取值有:

  • CREATE_NEW:如果文件不存在,則創(chuàng)建新文件;如果文件存在,則返回錯(cuò)誤。

  • CREATE_ALWAYS:如果文件不存在,則創(chuàng)建新文件;如果文件存在,則覆蓋文件。

  • OPEN_EXISTING:如果文件存在,則打開(kāi)文件;如果文件不存在,則返回錯(cuò)誤。

  • OPEN_ALWAYS:如果文件存在,則打開(kāi)文件;如果文件不存在,則創(chuàng)建新文件。

  • dwFlagsAndAttributes:文件屬性和標(biāo)志,指定文件的屬性和其他特性。常見(jiàn)的取值有:

  • FILE_ATTRIBUTE_NORMAL:普通文件。

  • FILE_FLAG_WRITE_THROUGH:直接寫入磁盤,不緩沖到內(nèi)存。

  • FILE_FLAG_OVERLAPPED:允許異步(非阻塞)I/O操作。

  • hTemplateFile:模板文件的句柄,用于指定文件的擴(kuò)展屬性。

CreateFile函數(shù)的返回值是一個(gè)HANDLE類型的句柄,用于后續(xù)操作文件。

下面是一個(gè)使用CreateFile函數(shù)創(chuàng)建文件的示例:

#include <Windows.h>
int main() {
LPCWSTR filePath = L"C:\\path\\to\\file.txt";   // 文件路徑
// 打開(kāi)或創(chuàng)建文件
HANDLE hFile = CreateFile(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
// 文件打開(kāi)或創(chuàng)建失敗
return -1;
}
// 寫入文件
char buffer[] = "Hello, World!";
DWORD bytesWritten;
if (!WriteFile(hFile, buffer, sizeof(buffer), &bytesWritten, NULL)) {
// 寫入文件失敗
return -1;
}
// 關(guān)閉文件
CloseHandle(hFile);
return 0;
}

該示例中,通過(guò)CreateFile函數(shù)創(chuàng)建或打開(kāi)一個(gè)文件,并使用WriteFile函數(shù)向文件中寫入數(shù)據(jù)。最后使用CloseHandle函數(shù)關(guān)閉文件的句柄。

0