#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let url = "SECRET";
let session = SessionBuilder::default()
.user("ymz".to_owned())
.keyfile("SECRET")
.connect(url)
.await?;
let mut child = session
.subsystem("sftp")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.await?;
let sftp = Sftp::new(
child.stdin().take().unwrap(),
child.stdout().take().unwrap(),
Default::default(),
)
.await?;
let mut fs = sftp.fs();
fs.set_cwd("/home/ymz/sftp_test/");
let dir = fs.open_dir("./test_list_rich_dir/").await.unwrap().read_dir().await?;
let mut actual = vec![];
for entry in dir {
actual.push(entry.filename().to_owned());
}
actual.sort_unstable();
println!("{:?}", actual);
Ok(())
}
[".", "..", "file-0", "file-1", "file-10", "file-100", "file-11", "file-12", "file-13", "file-14",
"file-15", "file-16", "file-17", "file-18", "file-19", "file-2", "file-20", "file-21", "file-22",
"file-23", "file-24", "file-25", "file-26", "file-27", "file-28", "file-29", "file-3", "file-30",
"file-31", "file-32", "file-33", "file-34", "file-35", "file-36", "file-37", "file-38", "file-39",
"file-4", "file-40", "file-41", "file-42", "file-43", "file-44", "file-45", "file-46", "file-47",
"file-48", "file-49", "file-50", "file-51", "file-52", "file-53", "file-54", "file-55", "file-56",
"file-57", "file-58", "file-59", "file-6", "file-60", "file-61", "file-62", "file-63", "file-64",
"file-65", "file-66", "file-67", "file-68", "file-69", "file-7", "file-70", "file-72", "file-73",
"file-74", "file-75", "file-76", "file-77", "file-78", "file-79", "file-8", "file-80", "file-82",
"file-83", "file-84", "file-85", "file-86", "file-87", "file-88", "file-89", "file-9", "file-90",
"file-91", "file-92", "file-93", "file-94", "file-95", "file-96", "file-97", "file-98", "file-99"]
According to my tests, as long as the number of files in the directory is greater than 100, this error will be generated. If there are only 90 files, it will run correctly.