SCP весь каталог с ssh2 на Windows - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь скопировать / загрузить всю папку на локальный компьютер, используя ssh версию 3.0 в Windows.Поскольку невозможно использовать ssh2::Session::scp_recv в Windows 10, я нашел другой способ их загрузки.Однако для этого необходимо знать путь к каждому файлу, который будет загружен.В этом случае необходимо загрузить все PDF-файлы из определенного каталога с неизвестным количеством подкаталогов.

1.Как уже говорилось, я использую Windows 10, и, к сожалению, приложение должно работать и на других системах Windows 10.

2.Чтобы определить путь к любому PDF, я попытался использовать рекурсивную функцию build_paths

fn build_paths(sess: &ssh2::Session, remotedir: &str) {
    let sftp_conn = sess.sftp().expect("Failed to create SFTP Handle!");
    let dir = sftp_conn
        .readdir(Path::new(remotedir))
        .expect("Failed to open remote path!");

    for f in dir {
        let (ff, stats) = f;
        let p = Path::new(&ff);

        if p.extension() == Some(OsStr::new("pdf")) {
            println!("File found!");
        }
        else {
            let d = sftp_conn.readdir(p); // start directory

            for subdir in d.unwrap() {
                println!("{:#?}", subdir);
                println!("{:?}", subdir.0.to_str().unwrap());
                build_paths(sess, subdir.0.to_str().unwrap()); //results in "infinite recursion"
            }

        }
    }
}

Ожидается вывод "Файл найден!"(фактическое построение пути должно быть реализовано после этой точки);однако фактический результат - бесконечная рекурсия этой функции.

...