91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++文件相關函數CreateFile|ReadFile|WriteFile怎么使用

發布時間:2023-04-27 14:34:10 來源:億速云 閱讀:140 作者:iii 欄目:開發技術

這篇文章主要介紹“C++文件相關函數CreateFile|ReadFile|WriteFile怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++文件相關函數CreateFile|ReadFile|WriteFile怎么使用”文章能幫助大家解決問題。

    一、CreateFile

    1.1 函數原型

    CreateFile 函數是 Windows API 中用于創建文件、目錄、管道、控制臺輸入/輸出緩沖區或遠程 IO 設備的函數。它位于 <windows.h> 頭文件中,函數原型如下:

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

    1.2 函數參數介紹

    CreateFile 函數的參數說明如下:

    lpFileName:指定文件名的字符串指針。

    dwDesiredAccess:指定文件的訪問模式。可以是下列值之一:

    • GENERIC_READ:可以讀取文件。

    • GENERIC_WRITE:可以寫入文件。

    • GENERIC_EXECUTE:可以執行文件。

    dwShareMode:指定文件的共享模式。可以是下列值之一:

    • FILE_SHARE_READ:允許其他進程讀取文件。

    • FILE_SHARE_WRITE:允許其他進程寫入文件。

    • FILE_SHARE_DELETE:允許其他進程刪除文件。

    lpSecurityAttributes:指定文件的安全屬性。如果設為 NULL,則使用默認安全描述符。

    dwCreationDisposition:指定如何創建文件。可以是下列值之一:

    • CREATE_NEW:如果文件不存在,則創建新文件;否則,返回 ERROR_FILE_EXISTS 錯誤。

    • TRUNCATE_EXISTING:如果文件存在,則截斷文件;否則,返回 ERROR_FILE_NOT_FOUND 錯誤。

    dwFlagsAndAttributes:指定文件的屬性。可以是下列值之一:

    • FILE_ATTRIBUTE_NORMAL:普通文件。

    • FILE_ATTRIBUTE_READONLY:只讀文件。

    • FILE_ATTRIBUTE_HIDDEN:隱藏文件。

    • FILE_ATTRIBUTE_SYSTEM:系統文件。

    hTemplateFile:指定用于創建文件的模板文件句柄。如果沒有模板文件,則設為 NULL。

    如果 CreateFile 函數調用成功,則返回一個文件句柄;如果調用失敗,則返回一個特殊的值 INVALID_HANDLE_VALUE,并可以使用 GetLastError 函數獲取錯誤代碼。

    1.3 示例代碼

    #include <windows.h>
    #include <iostream>
    int main() {
      // 指定文件名和訪問模式
      HANDLE hFile = CreateFile(L"test.txt",
                                 GENERIC_WRITE,
                                 0,  // 不共享
                                 NULL,  // 默認安全描述符
                                 CREATE_ALWAYS,  // 如果文件存在,則覆蓋
                                 FILE_ATTRIBUTE_NORMAL,  // 文件屬性
                                 NULL);  // 沒有模板文件
      if (hFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error creating file: " << GetLastError() << std::endl;
        return 1;
      }
      std::cout << "File created successfully." << std::endl;
      // 關閉文件句柄
      CloseHandle(hFile);
      return 0;
    }

    二、ReadFile

    2.1 函數原型

    在 C++ 中,可以使用 ReadFile 函數從文件中讀取數據。這個函數位于 <windows.h> 頭文件中,并且需要提供文件句柄、緩沖區地址和要讀取的字節數。

    ReadFile 函數的函數原型如下:

    BOOL ReadFile(
      HANDLE hFile,
      LPVOID lpBuffer,
      DWORD nNumberOfBytesToRead,
      LPDWORD lpNumberOfBytesRead,
      LPOVERLAPPED lpOverlapped
    );

    2.2 函數參數介紹

    ReadFile 函數的參數說明如下:

    hFile:指定要讀取的文件的句柄。

    lpBuffer:指向存儲讀取數據的緩沖區的指針。

    nNumberOfBytesToRead:指定要讀取的字節數。

    lpNumberOfBytesRead:指向一個變量的指針,用于返回實際讀取的字節數。

    lpOverlapped:指定用于異步 I/O 的數據結構的指針。如果不使用異步 I/O,則設為 NULL。

    在使用完文件后,應調用 CloseHandle 函數來關閉文件句柄,以釋放系統資源。

    2.3  示例代碼

    在這個例子中,我們打開了一個名為 test.txt 的文件,并以讀取模式打開了它。然后,我們調用 ReadFile 函數讀取文件中的數據,并將其存儲在緩沖區中。注意,ReadFile 函數的第四個參數是一個輸出參數,用于返回實際讀取的字節數。如果調用失敗,則函數返回 FALSE 并可以使用 GetLastError 函數獲取錯誤代碼。

    #include <windows.h>
    #include <iostream>
    int main() {
      // 打開文件
      HANDLE hFile = CreateFile(L"test.txt",
                                 GENERIC_READ,
                                 0,  // 不共享
                                 NULL,  // 默認安全描述符
                                 OPEN_EXISTING,  // 只能打開已存在的文件
                                 FILE_ATTRIBUTE_NORMAL,  // 文件屬性
                                 NULL);  // 沒有模板文件
      if (hFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening file: " << GetLastError() << std::endl;
        return 1;
      }
      // 定義緩沖區和讀取的字節數
      char buffer[1024];
      DWORD bytesRead;
      // 從文件中讀取數據
      if (!ReadFile(hFile, buffer, sizeof(buffer), &bytesRead, NULL)) {
        std::cerr << "Error reading file: " << GetLastError() << std::endl;
        return 1;
      }
      std::cout << "Read " << bytesRead << " bytes from file." << std::endl;
      // 關閉文件句柄
      CloseHandle(hFile);
      return 0;
    }

    三、WriteFile

    在 C++ 中,可以使用 WriteFile 函數向文件中寫入數據。這個函數位于 <windows.h> 頭文件中,并且需要提供文件句柄、緩沖區地址和要寫入的字節數。

    3.1 函數原型

    BOOL WriteFile(
      HANDLE hFile,
      LPCVOID lpBuffer,
      DWORD nNumberOfBytesToWrite,
      LPDWORD lpNumberOfBytesWritten,
      LPOVERLAPPED lpOverlapped
    );

    3.2 函數參數

    WriteFile 函數的參數說明如下:

    hFile:指定要寫入的文件的句柄。

    lpBuffer:指向包含要寫入的數據的緩沖區的指針。

    nNumberOfBytesToWrite:指定要寫入的字節數。

    lpNumberOfBytesWritten:指向一個變量的指針,用于返回實際寫入的字節數。

    lpOverlapped:指定用于異步 I/O 的數據結構的指針。如果不使用異步 I/O,則設為 NULL。

    在使用完文件后,應調用 CloseHandle 函數來關閉文件句柄,以釋放系統資源。

    3.3 示例代碼

    下面是一個簡單的例子,展示了如何使用 WriteFile 函數向文件中寫入數據:

    #include <windows.h>
    #include <iostream>
    int main() {
      // 打開文件
      HANDLE hFile = CreateFile(L"test.txt",
                                 GENERIC_WRITE,
                                 0,  // 不共享
                                 NULL,  // 默認安全描述符
                                 CREATE_ALWAYS,  // 如果文件存在,則覆蓋
                                 FILE_ATTRIBUTE_NORMAL,  // 文件屬性
                                 NULL);  // 沒有模板文件
      if (hFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening file: " << GetLastError() << std::endl;
        return 1;
      }
      // 定義緩沖區和寫入的字節數
      char buffer[] = "Hello, world!";
      DWORD bytesWritten;
      // 向文件中寫入數據
      if (!WriteFile(hFile, buffer, sizeof(buffer), &bytesWritten, NULL)) {
        std::cerr << "Error writing to file: " << GetLastError() << std::endl;
        return 1;
      }
      std::cout << "Wrote " << bytesWritten << " bytes to file." << std::endl;
      // 關閉文件句柄
      CloseHandle(hFile);
      return 0;
    }

    在這個例子中,我們打開了一個名為 test.txt 的文件,并以寫入模式打開了它。然后,我們調用 WriteFile 函數向文件中寫入數據,并將數據存儲在緩沖區中。

    注意,WriteFile 函數的第四個參數是一個輸出參數,用于返回實際寫入的字節數。如果調用失敗,則函數返回 FALSE 并可以使用 GetLastError 函數獲取錯誤代碼。

    四、三個api一起用示例代碼

    #include <windows.h>
    #include <iostream>
    int main() {
      // 打開輸入文件
      HANDLE hInFile = CreateFile(L"in.txt",
                                   GENERIC_READ,
                                   0,  // 不共享
                                   NULL,  // 默認安全描述符
                                   OPEN_EXISTING,  // 只能打開已存在的文件
                                   FILE_ATTRIBUTE_NORMAL,  // 文件屬性
                                   NULL);  // 沒有模板文件
      if (hInFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening input file: " << GetLastError() << std::endl;
        return 1;
      }
      // 打開
        HANDLE hOutFile = CreateFile(L"out.txt",
                                     GENERIC_WRITE,
                                     0, // 不共享
                                     NULL, // 默認安全描述符 
                                     CREATE_ALWAYS, // 如果文件存在,則覆蓋
                                     FILE_ATTRIBUTE_NORMAL, // 文件屬性
                                     NULL); // 沒有模板文件
        if (hOutFile == INVALID_HANDLE_VALUE) {
            std::cerr << "Error opening output file: " << GetLastError() << std::endl;
        return 1;
        }
        // 定義緩沖區和讀取/寫入的字節數
        char buffer[1024];
        DWORD bytesRead, bytesWritten;
        // 讀取輸入文件并寫入輸出文件
        while (ReadFile(hInFile, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
        if (!WriteFile(hOutFile, buffer, bytesRead, &bytesWritten, NULL)) {
            std::cerr << "Error writing to output file: " << GetLastError() <<             std::endl;
        return 1;
            }
        }
    // 關閉文件句柄
        CloseHandle(hInFile);
        CloseHandle(hOutFile);
        return 0;
    }

    提示

    另外,windows api讀取出來的字符是寬字節,某些情況下與C++標準輸出可能不一致,這方面在字符加密、流化等操作上會出現問題,所以如果有兼容要求建議使用C++標準輸入、輸出。

    如果要寫入文本文件,可以使用 C++ 標準庫中的 fstream 頭文件中的流類型,例如 ofstream 和 wofstream。這些類型提供了較為方便的寫入接口,可以直接使用運算符 << 寫入數據。下面是一個示例代碼,展示了如何使用 ofstream 類寫入文本文件:

    #include <fstream>
    #include <iostream>
    int main() {
      // 打開文件
      std::ofstream out("test.txt");
      if (!out) {
        std::cerr << "Error opening file." << std::endl;
        return 1;
      }
      // 寫入數據
      out << "Hello, world!" << std::endl;
      // 關閉文件
      out.close();
      return 0;
    }

    在這個例子中,我們打開了一個名為 test.txt 的文件,并使用運算符 << 向文件中寫入了一行字符串。在使用完文件后,我們調用了 close 方法來關閉文件。

    注意,如果要寫入 Unicode 字符串,可以使用 wofstream 類。

    最后,需要注意,在 Windows 系統中,文件名是區分大小寫的。因此,在打開文件時,需要確保文件名正確。

    關于“C++文件相關函數CreateFile|ReadFile|WriteFile怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    灵寿县| 黎城县| 贵阳市| 扬州市| 钟祥市| 贵港市| 广安市| 邵阳县| 临江市| 满城县| 甘谷县| 鄂州市| 香港| 广安市| 金乡县| 界首市| 尼木县| 顺昌县| 广南县| 瑞昌市| 凭祥市| 图木舒克市| 磐安县| 临澧县| 漯河市| 长岛县| 郴州市| 彭州市| 宜宾县| 孟州市| 光泽县| 伊金霍洛旗| 西峡县| 晋城| 洛扎县| 武宣县| 通州市| 庄河市| 靖远县| 东兴市| 榆社县|