wxLua: загрузка файлов с помощью wxFtp - PullRequest
2 голосов
/ 22 декабря 2008

Я пытаюсь использовать wxFTP на wxLua для загрузки нескольких файлов. Он работает с 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

1 Ответ

1 голос
/ 23 декабря 2008

Вместо вызова Close в выходном потоке установите переменную равной nil и позвольте сборщику мусора справиться с этим. wxOutputStream на самом деле является указателем на wxFTPOutputStream, который наследуется от wxSocketOuputStream. Метод 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")
...