2011-06-20 26 views
10

Uygulamamdaki bir FTP sunucusuna dizinler yüklemem gerekiyor ve libcurl'u kullanmayı planlıyorum. Görüyorum ki birçok dosya ile bir dizin yüklemek için doğrudan bir yol yoktur, bu bana mantıklı geliyor. Ancak, birçok dosya yükleyen numaralı telefondan herhangi bir söz bulamadım.libcurl - Çoklu Dosya Yükle'ye (FTP) Bağlan "açık" (FTP)

Dizindeki dosyaların listesini alırsam, bunları bir döngü halinde yükleyebilirim. CURLOPT_FTP_CREATE_MISSING_DIRS seçeneği, alt dizinler, yardımcı olabilir, ancak bu noktayı kaçırıyor da varsa veya bu önemli bir dezavantajı varsa olurdu.

Ana soru şu: Bağlantıyı "açık" olarak nasıl saklayabilirim? Her dosyanın üzerinden yeniden bağlanması, muhtemelen fazladan istenmeyen bir ek yük anlamına gelir.

İdeal olarak, kolay arayüzü kullanmaya devam etmek isterim. Ancak başka bir arayüz bu durumda daha iyi destek sağlıyorsa, onu kullanacağım.

CURLcode ret; 
CURL *handle = curl_easy_init(); 

/* Connect to FTP server using  * 
* the given username and password */ 

for ({each file}) { 

    curl_easy_setopt(handle, ..., ...); 
    ... 
    ret = curl_easy_perform(handle); 
    /* Analyse return code */ 
    curl_easy_reset(handle); 
} 

/* Disconnect from server */ 
curl_easy_clenup(handle); 

cevap

12

Aynen kolu tekrar kullanmak ve bağlantı önceki teker yeniden kullanacak mümkün ve sonraki aktarımlar kadar açmak tutacak.

Kolay arabirimi kullandığınızda, bağlantı önbelleği kolay tanıtıcı içinde tutulur. Bunun yerine çoklu arabirimi kullanırsanız, bağlantı önbelleği çoklu tanıtıcı içinde tutulur ve aynı çoklu tanıtıcı içinde kullanılan tüm kolay tutamaçlar arasında paylaşılır.

+0

Çok teşekkürler Sayın Stenberg, senden bir yanıt almaktan ne kadar gurur duyuyorsun! Daha fazla açıklama isteyebilirsem, bu durumda 'curl_easy_reset() 'gerekecektir? Adam sayfası, canlı bağlantıların tutamaçta tutulduğunu, ancak el ile (döngü içinde) seçenekleri yeniden ayarlayacağını söylüyor mu? – sidyll

+0

Kodunuza en uygun olduğunu düşündüğünüz yolu yapabilirsiniz. Sıfırlama, bağlantı önbelleğini kesmeyecektir. Bunu tercih ederseniz seçenekleri manuel olarak yeniden ayarlayabilirsiniz. –

+0

Bir kez daha teşekkürler ve harika iş için tebrikler. En iyi dileklerimiz – sidyll