прогрес на качване в FTPClient

Използвам commons-net FTPClient за качване на някои файлове.
Как мога да получа напредъка на качването (брой байтове, качени сега)?

Благодаря


person Ariyan    schedule 12.03.2012    source източник
comment

Опитвам се да разделя този низ със запетая като разделител. Сложих низ "Smith,Erdos,William" и той просто извежда "William", но не и Smith и Erdos. Трябва да има нещо нередно тук, което просто не виждам, може ли някой да помогне?

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

int main() {
    int numScenarios(0);
    int numPapers(0);
    int numWriters(0);
    std::vector<std::string> paperTitles (1);
    std::vector<std::string> paperAuthors (1);
    std::vector<std::string> splitAuthors (1);
    std::string token;
    std::string input;
    std::cin >> numScenarios;
    std::cin >> numPapers >> numWriters; 
    for (int i(0); i < numPapers; ++i) {
        std::getline(std::cin,input);
        std::istringstream iss(input);
        while(getline(iss,token,','));
        {
            std::cout << token << std::endl;
        }
        //paperTitles.push_back(input);
        //input = '\0';
    }
    for (int i(0); i < numWriters; ++i) {
        getline(std::cin,input);
        paperAuthors.push_back(input);
        input = '\0';
    }


return 0;
}
  -  person redDevil    schedule 13.03.2012


Отговори (2)


Разбира се, просто използвайте CopyStreamListener . По-долу ще намерите пример (копиран от commons-io wiki) за извличане на файлове, така че можете лесно да го промените в обратна посока.

    try {
            InputStream stO =
                new BufferedInputStream(
                    ftp.retrieveFileStream("foo.bar"),
                    ftp.getBufferSize());

            OutputStream stD =
                new FileOutputStream("bar.foo");

            org.apache.commons.net.io.Util.copyStream(
                    stO,
                    stD,
                    ftp.getBufferSize(),
/* I'm using the UNKNOWN_STREAM_SIZE constant here, but you can use the size of file too */
                    org.apache.commons.net.io.CopyStreamEvent.UNKNOWN_STREAM_SIZE,
                    new org.apache.commons.net.io.CopyStreamAdapter() {
                        public void bytesTransferred(long totalBytesTransferred,
                                int bytesTransferred,
                                long streamSize) {
                                // Your progress Control code here
                        }
            });
            ftp.completePendingCommand();
        } catch (Exception e) { ... }
person Łukasz Rżanek    schedule 12.03.2012
comment
Използвах това решение, метод public void bytesTransferred(long totalBytesTransferred,int bytesTransferred, long streamSize) извикан след всеки прехвърлен байт, не мога да актуализирам потребителския си интерфейс, тъй като неговата наводнена нишка с извиквания за актуализиране на потребителския интерфейс. Използвах в android, всеки може да помогне защо се случва @Lukasz - person Iftikar Urrhman Khan; 20.11.2014

Мисля, че може би е по-добре за нас CountingOutputStream, тъй като изглежда предназначен точно за тази цел?

На това е отговорено от някой тук: Наблюдение на напредъка с помощта на Apache Commons FTPClient

person bobjandal    schedule 28.06.2012