lua 的 WriteFile 和 ReadFile
lua 的 ReadFile 和 WriteFile 注意:
lua 代码中的 string 可以包含二进制数据 string.len(str) 不会被 '\0' 截断
从 lua 传入 c 时: 需要传入包含二进制数据的 string 和数据的 size, size 用 string.len(str) 来计算
从 c 传入 lua 时: 应该使用 lua_pushlstring 而不是 lua_pushstring, lua_pushstring 内部使用 strlen() 来计算数据的长度,而 lua_pushlstring 需要传入一个 size int LuaFileSystem::ReadFile( lua_State* luaState )
{
if (!lua_isstring(luaState, ))
{
return ;
}
const char* strPath = luaL_checkstring(luaState, );
std::wstring wstrPath;
TransCode::UTF8_to_Unicode(strPath, strlen(strPath), wstrPath);
HANDLE hFile = ::CreateFile(wstrPath.c_str(), GENERIC_READ, , NULL, OPEN_EXISTING, NULL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
DWORD nFileSize = ::GetFileSize(hFile, NULL);
char* lpBuffer = new char[nFileSize];
DWORD nNumberOfBytesRead;
BOOL bRet = ::ReadFile(hFile, lpBuffer, nFileSize, &nNumberOfBytesRead, NULL); lua_pushlstring(luaState, lpBuffer, nNumberOfBytesRead);
delete[] lpBuffer;
CloseHandle(hFile);
return ;
}
return ;
} int LuaFileSystem::WriteFile( lua_State* luaState )
{
if (!lua_isstring(luaState, ) || !lua_isstring(luaState, ))
{
return ;
}
const char* strPath = luaL_checkstring(luaState, );
const char* strContent = luaL_checkstring(luaState, );
int nContentSize = strlen(strContent);
if (lua_isnumber(luaState, ))
{
nContentSize = luaL_checkint(luaState, );
}
std::wstring wstrPath;
TransCode::UTF8_to_Unicode(strPath, strlen(strPath), wstrPath);
HANDLE hFile = ::CreateFile(wstrPath.c_str(), GENERIC_WRITE, , NULL, CREATE_ALWAYS, NULL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
DWORD nNumberOfBytesWritten;
::WriteFile(hFile, strContent, nContentSize, &nNumberOfBytesWritten, NULL);
CloseHandle(hFile);
}
return ;
}
lua 的 WriteFile 和 ReadFile的更多相关文章
- Win32 WriteFile and ReadFile
HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, // 文件路径 __in DWORD dwDesiredAccess, // 访问权限,GENER ...
- VC串口通讯,WriteFile或ReadFile没有任何返回??
别犯低级错误,一定要设置读写超时!!!
- quick-cocos2d-x的热更新机制实现
quick-cocos2d-x的热更新机制实现 0 依赖 这里说的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新api,根据更新api的反馈,下载更新资源,然后使用新的资源启动客户 ...
- 黑马程序员_Java基础:IO流总结
------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...
- swift GCD使用指南
swift GCD使用指南 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适 ...
- java Memorymapfile demo
String lineseperator = java.security.AccessController .doPrivileged(new sun.security.action.GetPrope ...
- Java IO(四)
对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- Windows与自定义USB HID设备通信说明.
1 . 所使用的典型 Windows API CreateFile ReadFile WriteFile 以下函数是 DDK 的内容: HidD_SetFeature HidD_GetFeatur ...
随机推荐
- JPA学习---第十一节:JPA中的多对多双向关联实体定义与注解设置及操作
1.定义实体类,代码如下: (1).学生实体类: package learn.jpa.entity; import java.util.HashSet; import java.util.Set; i ...
- 30道小学生四则运算题C/C++编程
软件工程科课上,老师通过实例讲解什么是程序,程序和软件的区别,要求我们通过短时间写一道编程题, 题目就是编写30道小学生四则运算题.以下就是源代码: #include<iostream.h> ...
- javascript各种模式解析
1.工厂模式: 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创建 ...
- Spring MVC常用的注解类
一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:  二.五大重要的注解类 1.RequestMapp ...
- Introduction to Financial Management
Recently,i am learning some useful things about financial management by reading <Essentials of Co ...
- 如何让Asp.net Web Api全局预防Xss攻击
一.概述 二.什么是XSS 三.预防方法 四.在WebApi中如何实现 在实现之前,需要了解ASP.NET WEB API的pipeline机制. 如上,可以采用多种方式进行参数的过滤 1.重写Del ...
- An overview of the Spring MVC request flow
The Spring MVC request flow in short: When we enter a URL in the browser, the request comes to the d ...
- bzoj 3142 数学
找规律后可以之后答案就是 k^(m-1)*(n-(m-1)*k)+(m+(m-1)*k+1)*k^(m-1) div 2 /************************************** ...
- hdu 3068 最长回文 manacher
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正 ...
- 【BZOJ】【1004】【HNOI2008】Cards
Burnside/Polya+背包DP 这道题目是等价类计数裸题吧……>_> 题解:http://m.blog.csdn.net/blog/njlcazl_11109/8316340 啊其 ...