#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);
|
};
|