Lua:无法复制 .png 文件

我尝试通过读取源文件并将数据写入目标文件来复制文件 - 失败了。 我尝试使用C扩展程序,如下所示:

这段代码可以运行 - 我成功地复制了文本文件,但是当我尝试复制.png图像时 - 我再次失败了 - 在所有这些方法中,我得到了损坏的图像。 我只能通过以下方式复制图像:

但这非常缓慢...

如何在不使用os.execute的情况下复制文件?

点赞
用户3204551
用户3204551

就第一件事而言,在 Unix 型系统上文本模式和二进制模式是相同的,但是在任何 Windows 系统上都没有出现过这种情况。

除非你想让文本文件被翻译,否则请使用二进制模式!


第二个问题,如果你逐个字符地读取文件,就显得很慢,因为你的多线程运行时必须为每个调用锁定和解锁。

获取一些良好的缓冲区,212 字节应该不错,并使用 fread / fwrite

2014-10-07 17:57:46
用户1442917
用户1442917

你需要在 Windows 上读/写文件时在二进制模式下打开文件,否则可能会有行末和文件末尾的处理会破坏文件。添加 "b" 修饰符

2014-10-07 17:58:15
用户3677376
用户3677376

以下是你的代码存在的问题,按出现顺序排序:

  1. ch 必须是 int 类型,否则可能会使 256 种有效字符中的某个值等于 EOF
  2. lua_tostring 函数有可能返回 NULL,你应该检查并处理这种情况,或者使用 luaL_checkstring 函数。
  3. 正如其他人所说:打开文件时应该以二进制模式打开(使用 "rb""wb")。
  4. 确保只在非 NULL 的文件句柄上调用 fclosefgetcfputc 函数。你的代码中可能缺少了一些 return
  5. 你没有检查 EOF 是否代表了文件结束或者出现了 I/O 错误。
  6. 函数返回值(在你的代码中是 1)告诉 Lua 在 Lua 栈中返回多少个值给调用函数。你有时返回一个值,但有时没有向 Lua 栈中推入任何值,有时又推入了多个。
2014-10-07 23:20:27