溫馨提示×

createfile函數(shù)的參數(shù)如何設置

小樊
82
2024-10-16 08:08:11
欄目: 編程語言

CreateFile函數(shù)是Windows API中用于創(chuàng)建、打開或枚舉文件或目錄的文件操作函數(shù)。其原型如下:

HANDLE CreateFile(
  LPCTSTR FileName,          // 文件名
  DWORD   DesiredAccess,     // 訪問模式
  DWORD   ShareMode,          // 分享模式
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全屬性
  DWORD   CreationDisposition, // 創(chuàng)建方式
  DWORD   FlagsAndAttributes, // 文件屬性
  HANDLE  hTemplateFile      // 模板文件句柄
);

以下是CreateFile函數(shù)參數(shù)的設置說明:

  1. FileName:指定要創(chuàng)建、打開或枚舉的文件或目錄的路徑名。

  2. DesiredAccess:指定要訪問文件或目錄的方式。此參數(shù)可以是以下值的組合:

    • FILE_READ_DATA:讀取文件數(shù)據(jù)。
    • FILE_WRITE_DATA:寫入文件數(shù)據(jù)。
    • FILE_APPEND_DATA:在文件末尾添加數(shù)據(jù)。
    • FILE_READ_ATTRIBUTES:讀取文件屬性。
    • FILE_WRITE_ATTRIBUTES:寫入文件屬性。
    • DELETE:刪除文件。
    • DELETE_ON_CLOSE:在關閉文件句柄時刪除文件。
    • READ_CONTROL:讀取文件控制信息。
    • WRITE_CONTROL:寫入文件控制信息。
    • SYNCHRONIZE_ACCESS:同步對文件的訪問。
    • MAXimalAccess:最大訪問權限。
  3. ShareMode:指定其他進程對文件或目錄的共享方式。此參數(shù)可以是以下值的組合:

    • FILE_SHARE_READ:允許其他進程讀取文件。
    • FILE_SHARE_WRITE:允許其他進程寫入文件。
    • FILE_SHARE_DELETE:允許其他進程刪除文件。
  4. lpSecurityAttributes:指向一個SECURITY_ATTRIBUTES結構體,用于指定文件或目錄的安全屬性。如果此參數(shù)為NULL,則文件或目錄將具有默認的安全屬性。

  5. CreationDisposition:指定要創(chuàng)建或打開文件的方式。此參數(shù)可以是以下值之一:

    • CREATE_NEW:創(chuàng)建一個新文件,如果文件已存在,則失敗。
    • CREATE_ALWAYS:創(chuàng)建一個新文件,如果文件已存在,則覆蓋它。
    • OPEN_EXISTING:打開一個現(xiàn)有文件,如果文件不存在,則失敗。
    • OPEN_ALWAYS:打開一個現(xiàn)有文件,如果文件不存在,則創(chuàng)建它。
    • TRUNCATE_EXISTING:截斷現(xiàn)有文件,將其長度設置為0,如果文件不存在,則創(chuàng)建一個新文件。
  6. FlagsAndAttributes:指定文件或目錄的標志和屬性。此參數(shù)可以是以下值的組合:

    • FILE_ATTRIBUTE_ARCHIVE:文件是存檔文件。
    • FILE_ATTRIBUTE_HIDDEN:文件是隱藏文件。
    • FILE_ATTRIBUTE_NORMAL:文件是普通文件。
    • FILE_ATTRIBUTE_SYSTEM:文件是系統(tǒng)文件。
    • FILE_FLAG_BACKUP_SEMANTICS:以備份模式打開文件。
    • FILE_FLAG_DELETE_ON_CLOSE:在關閉文件句柄時刪除文件。
    • FILE_FLAG_NO_BUFFERING:不對文件進行緩沖。
    • FILE_FLAG_OVERLAPPED:使用重疊結構進行異步操作。
    • FILE_FLAG_RANDOM_ACCESS:允許隨機訪問文件。
    • FILE_FLAG_SEQUENTIAL_SCAN:按順序掃描文件。
    • FILE_FLAG_WRITE_THROUGH:寫入操作直接寫入磁盤。
  7. hTemplateFile:指定一個模板文件的句柄,用于創(chuàng)建新文件。如果此參數(shù)為NULL,則新文件將不具有任何模板屬性。

以下是一個簡單的示例,演示如何使用CreateFile函數(shù)創(chuàng)建一個新文件:

#include <windows.h>
#include <stdio.h>

int main() {
  HANDLE hFile;
  DWORD dwBytesWritten;
  const char* fileName = "test.txt";
  const char* fileContent = "Hello, World!";

  hFile = CreateFile(
    fileName,                   // 文件名
    GENERIC_WRITE,              // 訪問模式
    0,                          // 分享模式
    NULL,                       // 安全屬性
    CREATE_ALWAYS,              // 創(chuàng)建方式
    0,                          // 文件屬性
    NULL                        // 模板文件句柄
  );

  if (hFile == INVALID_HANDLE_VALUE) {
    printf("Error: %lu\n", GetLastError());
    return 1;
  }

  if (!WriteFile(
    hFile,                      // 文件句柄
    fileContent,                // 要寫入的數(shù)據(jù)
    strlen(fileContent),        // 數(shù)據(jù)長度
    &dwBytesWritten,            // 寫入的字節(jié)數(shù)
    NULL                        // 重疊結構體
  )) {
    printf("Error: %lu\n", GetLastError());
    CloseHandle(hFile);
    return 1;
  }

  CloseHandle(hFile);
  printf("File created successfully.\n");
  return 0;
}

在這個示例中,我們使用CreateFile函數(shù)創(chuàng)建一個名為test.txt的新文件,并使用WriteFile函數(shù)向文件中寫入字符串Hello, World!。如果文件創(chuàng)建成功,程序將輸出File created successfully.。

0