📄 fileio.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 + -