CreateFile,WriteFile,ReadFile


注意:
CreateFile 跟 fopen 不同,打開文件時不區分 文本方式 或 二進制 方式
ReadFile 或 WriteFile 都是對二進制數據進行操作

HANDLE WINAPI CreateFile(
  __in          LPCTSTR lpFileName,             // 文件路徑
  __in          DWORD dwDesiredAccess,          // 訪問權限,GENERIC_READ | GENERIC_WRITE
  __in          DWORD dwShareMode,              // 共享模式,NULL | FILE_SHARE_READ | FILE_SHARE_WRITE
  __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,    // 安全屬性
  __in          DWORD dwCreationDisposition,    // 創建配置,CREATE_ALWAYS | CREATE_NEW | OPEN_ALWAYS | OPEN_EXISTING
  __in          DWORD dwFlagsAndAttributes,     // 擴展屬性,NULL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY
  __in          HANDLE hTemplateFile            // 指定一個文件句柄,新文件將從這個文件中復制擴展屬性。NULL
);

BOOL WINAPI ReadFile(
  __in          HANDLE hFile,                   // 文件句柄
  __out         LPVOID lpBuffer,                // 接收數據用的 buffer
  __in          DWORD nNumberOfBytesToRead,     // 要讀取的字節數
  __out         LPDWORD lpNumberOfBytesRead,    // 實際讀取到的字節數
  __in          LPOVERLAPPED lpOverlapped       // OVERLAPPED 結構,一般設定為 NULL 
);

BOOL WINAPI WriteFile(
  __in          HANDLE hFile,                   // 文件句柄
  __in          LPCVOID lpBuffer,               // 要寫入的數據
  __in          DWORD nNumberOfBytesToWrite,    // 要寫入的字節數
  __out         LPDWORD lpNumberOfBytesWritten, // 實際寫入的字節數
  __in          LPOVERLAPPED lpOverlapped       // OVERLAPPED 結構,一般設定為 NULL
);

DWORD WINAPI GetFileSize(
  __in          HANDLE hFile,                   // 文件句柄
  __out         LPDWORD lpFileSizeHigh          // high-order 的返回值,一般設定為 NULL
);

讀文件:
void read(const wchar_t* strPath)
{
    HANDLE hFile = ::CreateFile(strPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        DWORD nFileSize = ::GetFileSize(hFile, NULL);
        char* lpBuffer = new char[nFileSize];
        DWORD nNumberOfBytesRead;
        BOOL bRet = ::ReadFile(hFile, lpBuffer, nFileSize, &nNumberOfBytesRead, NULL);
        
        // TODO ...
        
        delete[] lpBuffer;
        CloseHandle(hFile);
    }
}

寫文件:
void write(const wchar_t* strPath, const wchar_t* strContent, const int nContentSize)
{
    HANDLE hFile = ::CreateFile(strPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, NULL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        DWORD nNumberOfBytesWritten;
        ::WriteFile(hFile, strContent, nContentSize, &nNumberOfBytesWritten, NULL);
        
        // TODO ...
        
        CloseHandle(hFile);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM