LiFan
9 天以前 63eebabbfee1bc84850b36967ecac5116a28b73f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#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;
}