2

wxLua で wxFTP を使用して複数のファイルをアップロードしようとしています。1 番目のファイルでは機能しますが、2 番目のファイルを送信できない理由がわかりません。失敗するサンプルを次に示します。

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 に答える