⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileio.cpp

📁 standard file IO C++
💻 CPP
字号:
//==============================================================================
//  CLASS\standardIO\fileIO
//  ver 1.05.0
//==============================================================================
#include <windows.h>
#include <commctrl.h>
#include <commdlg.h>
#include "fileIO.h"
//==============================================================================
//******************************************************************************
BOOL
fileIO_CLASS::Dialog_OpenFileName (HWND hWnd,
                                   TCHAR* pstrFile,
                                   TCHAR* pstrTitle,
                                   TCHAR* pstrFilter,
                                   TCHAR* pstrDefExt)
{
    OPENFILENAME ofn;
    DWORD dwSize;

    dwSize = sizeof(ofn);
    memset (&ofn, 0, dwSize);

    ofn.hwndOwner = hWnd;
    ofn.lStructSize = dwSize;
    ofn.lpstrFilter = pstrFilter;
    ofn.nFilterIndex = 1;
    ofn.lpstrFile = pstrFile;
    ofn.nMaxFile = FILEIO_MAX_FILENAME;
    ofn.lpstrTitle = pstrTitle;
    ofn.lpstrDefExt = pstrDefExt;

    return GetOpenFileName(&ofn);
}
//******************************************************************************
BOOL
fileIO_CLASS::Dialog_SaveFileName (HWND hWnd,
                                   TCHAR* pstrFile,
                                   TCHAR* pstrTitle,
                                   TCHAR* pstrFilter,
                                   TCHAR* pstrDefExt)
{
    OPENFILENAME ofn;
    DWORD dwSize;

    dwSize = sizeof(ofn);
    memset (&ofn, 0, dwSize);

    ofn.hwndOwner = hWnd;
    ofn.lStructSize = dwSize;
    ofn.lpstrFilter = pstrFilter;
    ofn.nFilterIndex = 1;
    ofn.lpstrFile = pstrFile;
    ofn.nMaxFile = FILEIO_MAX_FILENAME;
    ofn.lpstrTitle = pstrTitle;
    ofn.lpstrDefExt = pstrDefExt;

    return GetSaveFileName(&ofn);
}
//******************************************************************************
STATUS_CODE
fileIO_CLASS::Read_FileToBuffer (TCHAR* pFileName,
                                 bufferSTRUCT& bufReceived,
                                 UINT& rnBytesToRead,
                                 UINT nStartByte)
{
    INT iReturnVal = ERROR_UNKNOWN;

    BOOL fSuccess = false;
    DWORD nBytes = 0;
    HANDLE hFile = NULL;
    BY_HANDLE_FILE_INFORMATION fileInfo = {0};
    long dwFilePosHigh;

    hFile = CreateFile (pFileName,
                        GENERIC_READ,
                        0,
                        NULL,
                        OPEN_EXISTING,
                        0,
                        NULL);

    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
    {
        nBytes = rnBytesToRead;
        GetFileInformationByHandle (hFile, &fileInfo);

        if (nStartByte < (DWORD) fileInfo.nFileSizeLow)
        {
            if (nBytes == 0)
            {
                nBytes = (DWORD) fileInfo.nFileSizeLow - nStartByte;
            }
            if (bufReceived.nMaxSize < nBytes)
            {
                nBytes = bufReceived.nMaxSize;
            }

            if (nStartByte != 0)
            {
                dwFilePosHigh = HIWORD (nStartByte);
                SetFilePointer (hFile, 
                                LOWORD (nStartByte), 
                                &dwFilePosHigh, 
                                FILE_BEGIN);
            }

            fSuccess = ReadFile (hFile,
                                 bufReceived.pBuffer,
                                 nBytes,
                                 &nBytes,
                                 NULL);
            if (fSuccess)
            {
                if (nBytes == rnBytesToRead)
                {
                    iReturnVal = ERROR_NONE;
                }
                else
                {
                    iReturnVal = ERROR_FILEIO_READ_DATA_SHORT;
                }
            }
            else
            {
                iReturnVal = ERROR_FILEIO_READ_FAILED;
            }
            rnBytesToRead = nBytes;
            bufReceived.nSize = (UINT) nBytes;
        }
        else
        {
            bufReceived.nSize = 0;
            iReturnVal = ERROR_FILEIO_READ_STARTPOS_INVALID;
        }
        
        CloseHandle(hFile);
    }
    else
    {
        iReturnVal = ERROR_FILEIO_INVALID_HANDLE;
    } //  ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))

    return iReturnVal;
}
//******************************************************************************
STATUS_CODE 
fileIO_CLASS::Write_FileFromBuffer (TCHAR* pFileName,
                                    BOOL fOverWriteExisting,
                                    VOID* pBuffer,
                                    UINT& rnBytesToWrite)
{
    INT iReturnVal = ERROR_UNKNOWN;
    BOOL fSuccess;
    DWORD nBytes;
    HANDLE hFile;
    DWORD dwCreateFlags;
    
    if (fOverWriteExisting)
    {
        dwCreateFlags = CREATE_ALWAYS;
    }
    else
    {
        dwCreateFlags = CREATE_NEW;
    }

    hFile = CreateFile (pFileName,
                        GENERIC_WRITE,
                        0,
                        NULL,
                        dwCreateFlags,
                        0,
                        NULL);

    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
    {
        nBytes = rnBytesToWrite;

        fSuccess = WriteFile (hFile,
                              pBuffer,
                              nBytes,
                              &nBytes,
                              NULL);
        if (fSuccess)
        {
            if (nBytes == rnBytesToWrite)
            {
                iReturnVal = ERROR_NONE;
            }
            else
            {
                iReturnVal = ERROR_FILEIO_WRITE_DATA_SHORT;
            }
        }
        else
        {
            iReturnVal = ERROR_FILEIO_WRITE_FAILED;
        }
        rnBytesToWrite = (UINT) nBytes;

        CloseHandle (hFile);
    }
    else
    {
        iReturnVal = ERROR_FILEIO_INVALID_HANDLE;
    } //  ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))

    return iReturnVal;
}
//******************************************************************************
//==============================================================================
//******************************************************************************
UINT
fileIO_CLASS::Get_FileSize(TCHAR* pFileName)
{
    UINT nReturnVal = 0;

    HANDLE hFile;
    BY_HANDLE_FILE_INFORMATION fileInfo = {0};
    
    hFile = CreateFile (pFileName,
                        GENERIC_READ,
                        0,
                        NULL,
                        OPEN_EXISTING,
                        0,
                        NULL);

    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
    {
        if (GetFileInformationByHandle (hFile, &fileInfo))
        {
            nReturnVal = fileInfo.nFileSizeLow;
        }
        CloseHandle(hFile);
    }
   
    return nReturnVal;
}
//******************************************************************************
//==============================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -