【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

Lua中WriteFile和ReadFile

原创 2016年05月31日 17:31:01
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, 2))
    {
        return 0;
    }
    const char* strPath = luaL_checkstring(luaState, 2);
    std::wstring wstrPath;
    TransCode::UTF8_to_Unicode(strPath, strlen(strPath), wstrPath);
    HANDLE hFile = ::CreateFile(wstrPath.c_str(), GENERIC_READ, 0, 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 1;
    }
    return 0;
}


int LuaFileSystem::WriteFile( lua_State* luaState )
{
    if (!lua_isstring(luaState, 2) || !lua_isstring(luaState, 3))
    {
        return 0;
    }
    const char* strPath = luaL_checkstring(luaState, 2);
    const char* strContent = luaL_checkstring(luaState, 3);
    int nContentSize = strlen(strContent);
    if (lua_isnumber(luaState, 4))
    {
        nContentSize = luaL_checkint(luaState, 4);
    }
    std::wstring wstrPath;
    TransCode::UTF8_to_Unicode(strPath, strlen(strPath), wstrPath);
    HANDLE hFile = ::CreateFile(wstrPath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, NULL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        DWORD nNumberOfBytesWritten;
        ::WriteFile(hFile, strContent, nContentSize, &nNumberOfBytesWritten, NULL);
        CloseHandle(hFile);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

lua 的io操作,非常详细。

Lua 标准库 - 输入输出处理(input and output facilities)责任编辑:cynthia作者:来自ITPUB论坛   2008-02-18   文本Tag: Lua  【IT...

串口之ReadFile、WriteFile函数详解

BOOL ReadFile(   HANDLE hFile, //文件的句柄   LPVOID lpBuffer, //用于保存读入数据的一个缓冲区   DWORD nNumberOfByte...

WriteFile和ReadFile函数

读写文件是每个Windows软件开发人员都需要做的工作。可见这项工作是非常重要的,毕竟各种各样的数据都需要保存起来,以便作各种各样的分析,或者通过网络传送给别人。像大家用BT下载的电影,在那个BT软件...
  • softn
  • softn
  • 2016-06-22 06:11
  • 656

WriteFile与ReadFile

WriteFile函数: 该函数的功能是往文件中写数据,该函数可用来完成同步和异步操作的。写入的位置是由文件指针制定的文字,在完成写操作后,文件的指针会移动到文件新增加的字节的最后(当然这是在文...
  • ccrrt
  • ccrrt
  • 2013-01-15 14:24
  • 2319

CreateFile ReadFile WriteFile 详解

1. 创建和打开文件 创建任何一种文件只需要用到API函数CreateFile,应用程序可以通过该函数指定文件的格式为读取、写入或两者皆可,也可以指定是否为共享文件。如果该文件名已经存在,则将其打开...

WriteFile和ReadFile函数

读写文件是每个Windows软件开发人员都需要做的工作。可见这项工作是非常重要的,毕竟各种各样的数据都需要保存起来,以便作各种各样的分析,或者通过网络传送给别人。像大家用BT下载的电影,在那个BT软件...

C/C++ 文件操作之CreateFile、ReadFile和WriteFile

转载自:http://blog.csdn.net/jeanphorn/article/details/44982273 1. CreateFile   这个函数的功能是创建或者打开一个文件...

Windows API一日一练(54)WriteFile和ReadFile函数

读写文件是每个Windows软件开发人员都需要做的工作。可见这项工作是非常重要的,毕竟各种各样的数据都需要保存起来,以便作各种各样的分析,或者通过网络传送给别人。像大家用BT下载的电影,在那个BT软件...

CreateFile ReadFile WriteFile读写文件操作

以下是这个函数的说明: CreateFile这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。 ...

C/C++ 文件操作之CreateFile、ReadFile和WriteFile

1. CreateFile  这个函数的功能是创建或者打开一个文件或者I/O设备,通常使用的I/O形式有文件、文件流、目录、物理磁盘、卷、终端流等。如执行成功,则返回文件句柄。 INVALID_HAN...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)