2

我正在尝试在 wxLua 上使用 wxFTP 来上传多个文件。它适用于第一个文件,但我不明白为什么我不能发送第二个文件。这是一个失败的示例:

local ftp = wx.wxFTP()
local ftpAddress = wx.wxIPV4address()
ftpAddress:Service( "ftp" )
ftpAddress:Hostname( "ftp.example.com" )
ftp:Connect( ftpAddress )
local out1 = ftp:GetOutputStream( "foo" )
out1:Close()
local out2 = ftp:GetOutputStream( "bar" )
out2:Close() -- here out2 is nil
4

1 回答 1

1

而不是在输出流上调用 Close 将变量设置为 nil 并让垃圾收集器处理它。wxOutputStream 实际上是一个指向从 wxSocketOutputStream 继承的 wxFTPOutputStream 的指针。Close 方法不做任何事情——它总是返回 true——并且必须销毁流(即调用的析构函数)才能关闭套接字。

尝试这个:

local ftp = wx.wxFTP()
local ftpAddress = wx.wxIPV4address()
ftpAddress:Service( "ftp" )
ftpAddress:Hostname( "ftp.example.com" )
ftp:Connect( ftpAddress )
local out1 = ftp:GetOutputStream( "foo" )
out1 = nil
collectgarbage("collect")  -- force full garbage collection
local out2 = ftp:GetOutputStream( "bar" )
out2 = nil
collectgarbage("collect")
于 2008-12-23T17:12:01.670 回答