#include "wobject/xbase.hpp"
|
#include "wobject/xstring.hpp"
|
#include "win32/xfile.hpp"
|
#include <vector>
|
|
xstring xfile::GetString(xstring path)
|
{
|
int nLen = 0;
|
const wchar_t* file = path.c_str(false);
|
if (file[0] == 'f' && file[1] == 'i' && file[2] == 'l' && file[3] == 'e' && file[4] == ':' && file[5] == '/' && file[6] == '/')
|
file += 7;
|
BYTE* lpBuffer = xfile::GetBuffer(file, nLen);
|
if (!lpBuffer)return L"";
|
void* p = lpBuffer;
|
if (nLen > 2)
|
{
|
if ((lpBuffer[0] == 0xff && lpBuffer[1] == 0xfe) || (lpBuffer[0] == 0xfe && lpBuffer[1] == 0xff))lpBuffer = lpBuffer + 2;
|
}
|
xstring str = (wchar_t*)lpBuffer;
|
if (p)delete p;
|
return str;
|
}
|
|
BYTE* xfile::GetBuffer(xstring path, int& Length)
|
{
|
TCHAR buf[255];
|
TCHAR* pToken = NULL;
|
int len = 0;
|
|
DWORD dwFileSize = 0;
|
DWORD dwReadSize = 0;
|
|
DWORD GENERIC_READ = (0x80000000L);
|
DWORD GENERIC_WRITE = (0x40000000L);
|
DWORD GENERIC_EXECUTE = (0x20000000L);
|
DWORD GENERIC_ALL = (0x10000000L);
|
|
DWORD FILE_SHARE_READ = 0x00000001;
|
DWORD FILE_SHARE_WRITE = 0x00000002;
|
DWORD FILE_SHARE_DELETE = 0x00000004;
|
DWORD FILE_ATTRIBUTE_NORMAL =0x00000080;
|
DWORD OPEN_ALWAYS = 4;
|
DWORD OPEN_EXISTING = 3;
|
|
HANDLE INVALID_HANDLE_VALUE = ((HANDLE)(LONG_PTR)-1);
|
|
try {
|
HANDLE hFile = xfile::CreateFile(path.c_str(false), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
if (hFile != INVALID_HANDLE_VALUE)
|
{
|
dwFileSize = ::GetFileSize(hFile, NULL);
|
BYTE* lpBuffer = new BYTE[dwFileSize+2];
|
lpBuffer[dwFileSize] = 0;
|
lpBuffer[dwFileSize+1] = 0;
|
ReadFile(hFile, lpBuffer, dwFileSize, &dwReadSize, NULL);
|
Length = dwReadSize;
|
if (hFile != INVALID_HANDLE_VALUE)CloseHandle(hFile);
|
return lpBuffer;
|
}
|
}
|
catch (...)
|
{
|
|
}
|
return nullptr;
|
}
|