⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapfile.hpp

📁 使用Qt4编写的星际译王(stardict)
💻 HPP
字号:
#ifndef _MAPFILE_HPP_#define _MAPFILE_HPP_#ifdef HAVE_CONFIG_H#  include "config.h"#endif#ifdef HAVE_MMAP#  include <sys/types.h>#  include <fcntl.h>#  include <sys/mman.h>#endif#ifdef _WIN32#  include <windows.h>#endif#include <glib.h>class MapFile {public:  MapFile(void) : 		data(NULL),#ifdef HAVE_MMAP		mmap_fd(-1)#elif defined(_WIN32)		hFile(0),		hFileMap(0)#endif	{	}  ~MapFile();  bool open(const char *file_name, unsigned long file_size);  inline gchar *begin(void) { return data; }private:  char *data;  unsigned long size;#ifdef HAVE_MMAP  int mmap_fd;#elif defined(_WIN32)  HANDLE hFile;  HANDLE hFileMap;#endif};inline bool MapFile::open(const char *file_name, unsigned long file_size){  size=file_size;#ifdef HAVE_MMAP  if ((mmap_fd = ::open(file_name, O_RDONLY)) < 0) {    //g_print("Open file %s failed!\n",fullfilename);    return false;  }  data = (gchar *)mmap( NULL, file_size, PROT_READ, MAP_SHARED, mmap_fd, 0);  if ((void *)data == (void *)(-1)) {    //g_print("mmap file %s failed!\n",idxfilename);    data=NULL;    return false;  }#elif defined( _WIN32)  hFile = CreateFile(file_name, GENERIC_READ, 0, NULL, OPEN_ALWAYS, 		     FILE_ATTRIBUTE_NORMAL, 0);  hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0,  			       file_size, NULL);  data = (gchar *)MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, file_size);#else  gsize read_len;  if (!g_file_get_contents(file_name, &data, &read_len, NULL))    return false;  if (read_len!=file_size)    return false;		#endif  return true;}inline MapFile::~MapFile(){  if (!data)    return;#ifdef HAVE_MMAP  munmap(data, size);  close(mmap_fd);#else#  ifdef _WIN32  UnmapViewOfFile(data);  CloseHandle(hFileMap);  CloseHandle(hFile);#  else		g_free(data);#  endif#endif			}#endif//!_MAPFILE_HPP_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -