#pragma once 
 | 
  
 | 
#include "system/base.hpp" 
 | 
#include "win.hpp" 
 | 
#include "wobject/xstring.hpp" 
 | 
  
 | 
#if _XWIN 
 | 
#define CALLBACK    __stdcall 
 | 
#define MAX_PATH    260 
 | 
  
 | 
typedef void* LPSECURITY_ATTRIBUTES; 
 | 
typedef UINT_PTR(CALLBACK* LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM); 
 | 
struct OPENFILENAMEW 
 | 
{ 
 | 
    DWORD        lStructSize; 
 | 
    HWND         hwndOwner; 
 | 
    HINSTANCE    hInstance; 
 | 
    LPCWSTR      lpstrFilter; 
 | 
    LPWSTR       lpstrCustomFilter; 
 | 
    DWORD        nMaxCustFilter; 
 | 
    DWORD        nFilterIndex; 
 | 
    LPWSTR       lpstrFile; 
 | 
    DWORD        nMaxFile; 
 | 
    LPWSTR       lpstrFileTitle; 
 | 
    DWORD        nMaxFileTitle; 
 | 
    LPCWSTR      lpstrInitialDir; 
 | 
    LPCWSTR      lpstrTitle; 
 | 
    DWORD        Flags; 
 | 
    WORD         nFileOffset; 
 | 
    WORD         nFileExtension; 
 | 
    LPCWSTR      lpstrDefExt; 
 | 
    LPARAM       lCustData; 
 | 
    LPOFNHOOKPROC lpfnHook; 
 | 
    LPCWSTR      lpTemplateName; 
 | 
  
 | 
    void* pvReserved; 
 | 
    DWORD        dwReserved; 
 | 
    DWORD        FlagsEx; 
 | 
}; 
 | 
  
 | 
//FILETIME½á¹¹³ÖÓеÄ64λÎÞ·ûºÅµÄÎļþµÄÈÕÆÚºÍʱ¼äÖµ¡£Í·Îļþ: WINDEF.H 
 | 
struct FILETIME 
 | 
{ 
 | 
    int dwLowDateTime; // µÍ 32 Î»   
 | 
    int dwHighDateTime; // ¸ß 32 Î»   
 | 
}; 
 | 
  
 | 
#if 0 
 | 
struct fileinfo : public xstruct 
 | 
{ 
 | 
    char[128] szFileTitle; //ÎļþµÄ±êÌâÃû 
 | 
    int dwFileAttributes; //ÎļþµÄÊôÐÔ 
 | 
    FILETIME ftCreationTime; //ÎļþµÄ´´½¨Ê±¼ä 
 | 
    FILETIME ftLastAccessTime; //ÎļþµÄ×îºó·ÃÎÊʱ¼ä 
 | 
    FILETIME ftLastWriteTime; //ÎļþµÄ×îºóÐÞ¸Äʱ¼ä 
 | 
    int nFileSizeHigh; //Îļþ´óСµÄ¸ßλ˫×Ö 
 | 
    int nFileSizeLow; //Îļþ´óСµÄµÍλ˫×Ö 
 | 
    int dwReserved0; //±£Áô£¬Îª0 
 | 
    int dwReserved1; //±£Áô£¬Îª0 
 | 
}; 
 | 
#endif 
 | 
  
 | 
typedef struct _WIN32_FIND_DATAW { 
 | 
    DWORD dwFileAttributes; 
 | 
    FILETIME ftCreationTime; 
 | 
    FILETIME ftLastAccessTime; 
 | 
    FILETIME ftLastWriteTime; 
 | 
    DWORD nFileSizeHigh; 
 | 
    DWORD nFileSizeLow; 
 | 
    DWORD dwReserved0; 
 | 
    DWORD dwReserved1; 
 | 
    WCHAR  cFileName[MAX_PATH]; 
 | 
    WCHAR  cAlternateFileName[14]; 
 | 
} WIN32_FIND_DATAW; 
 | 
  
 | 
  
 | 
extern "C" 
 | 
{ 
 | 
    //namespace win32 
 | 
    //{ 
 | 
        bool  WINAPI GetSaveFileNameW(OPENFILENAMEW*);//native from "comdlg32.dll" alias "GetSaveFileNameW"; 
 | 
        bool  WINAPI GetOpenFileNameW(OPENFILENAMEW*);//native from "comdlg32.dll" alias "GetOpenFileNameW"; 
 | 
  
 | 
        HANDLE WINAPI FindFirstFileW(const WCHAR* lpFileName, WIN32_FIND_DATAW* lpFindFileData); //native from "kernel32.dll" alias "FindFirstFileW";    //¸ù¾ÝÎļþÃû²éÕÒÎļþ,Ò»µ©²»ÔÙÐèÒª£¬Ó¦¸ÃÓÃFindCloseº¯Êý¹Ø±ÕÕâ¸ö¾ä±ú 
 | 
        BOOL WINAPI FindNextFileW(HANDLE hFindFile, WIN32_FIND_DATAW* lpFindFileData); //native from "kernel32.dll" alias "FindNextFileW";    //¼ÌÐø²éÕÒFindFirstFileº¯ÊýËÑË÷ºóµÄÎļþ ,HANDLE hFindFileËÑË÷µÄÎļþ¾ä±ú º¯ÊýÖ´ÐеÄʱºòËÑË÷µÄÊǴ˾ä±úµÄÏÂÒ»Îļþ¡£·ÇÁã±íʾ³É¹¦£¬Áã±íʾʧ°Ü¡£Èç²»ÔÙÓÐÓëÖ¸¶¨Ìõ¼þÏà·ûµÄÎļþ£¬»á½«GetLastErrorÉèÖóÉERROR_NO_MORE_FILES 
 | 
        bool  WINAPI FindClose(HANDLE hFindFile); //native from "kernel32.dll" alias "FindClose";    //¹Ø±ÕÓÉFindFirstFileº¯Êý´´½¨µÄÒ»¸öËÑË÷¾ä±ú¡£·µ»Ø·ÇÁã±íʾ³É¹¦£¬Áã±íʾʧ°Ü¡£»áÉèÖÃGetLastError  
 | 
  
 | 
        HANDLE  WINAPI CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); //native from "kernel32.dll" alias "CreateFileW"; 
 | 
        HFILE  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT* lpReOpenBuff, UINT wStyle); //native from "kernel32.dll" alias "OpenFile"; 
 | 
        int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod); //native from "kernel32.dll" alias "SetFilePointer"; 
 | 
        int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; 
 | 
        int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; 
 | 
        int  WINAPI CloseHandle(HANDLE hFile); //native from "kernel32.dll" alias "CloseHandle"; 
 | 
        int  WINAPI GetFileSize(HANDLE hFile, DWORD* lpFileSizeHigh); //native from "kernel32.dll" alias "GetFileSize"; 
 | 
    //} 
 | 
} 
 | 
#endif 
 | 
  
 | 
  
 | 
class xfile 
 | 
{ 
 | 
public: 
 | 
    static bool  GetSaveFileName(OPENFILENAMEW& OpenFileName) 
 | 
    { 
 | 
        return ::GetSaveFileNameW(&OpenFileName); 
 | 
    } 
 | 
    static bool GetOpenFileName(OPENFILENAMEW& SaveFileName) 
 | 
    { 
 | 
        return ::GetOpenFileNameW(&SaveFileName); 
 | 
    } 
 | 
  
 | 
    static HANDLE FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData) 
 | 
    { 
 | 
        return ::FindFirstFileW(lpFileName, &lpFindFileData); 
 | 
    } 
 | 
  
 | 
    static BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData) 
 | 
    { 
 | 
        return ::FindNextFileW(hFindFile, &lpFindFileData); 
 | 
    } 
 | 
    static bool FindClose(HANDLE hFindFile) 
 | 
    { 
 | 
        return ::FindClose(hFindFile); 
 | 
    } 
 | 
  
 | 
    static HANDLE  CreateFile(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) 
 | 
    { 
 | 
        return ::CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); 
 | 
    } 
 | 
  
 | 
    static HFILE  OpenFile(LPCSTR lpFileName, OFSTRUCT& lpReOpenBuff, UINT wStyle) 
 | 
    { 
 | 
        return ::OpenFile(lpFileName, &lpReOpenBuff, wStyle); 
 | 
    } 
 | 
    static int  SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod) 
 | 
    { 
 | 
        return ::SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); 
 | 
    } 
 | 
    static int  ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) 
 | 
    { 
 | 
        return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); 
 | 
    } 
 | 
    static int  WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) 
 | 
    { 
 | 
        return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); 
 | 
    } 
 | 
    static int  CloseHandle(HANDLE hFile) 
 | 
    { 
 | 
        return  ::CloseHandle(hFile); 
 | 
    } 
 | 
    static int  GetFileSize(HANDLE hFile, DWORD& lpFileSizeHigh) 
 | 
    { 
 | 
        return ::GetFileSize(hFile, &lpFileSizeHigh); 
 | 
    } 
 | 
  
 | 
    static xstring GetString(xstring path); 
 | 
    static BYTE* GetBuffer(xstring path,int& Length); 
 | 
}; 
 |