c# - 数千个文件后通过 SSH.Net 的 SFTP 上传崩溃
问题描述
对于归档例程,我需要将文件及其各自的文件夹结构上传到 sftp。在测试用例中,我运行了大约 36.000 个 PDF 文件,每个 400-500 KB,每个文件都有一个 .xml 和一个 .ok 文件,所以总共大约 108.000 个文件。问题是,在大约 3.500 个 PDF 文件或总共 10.500 个文件之后,程序会产生“错误的数据包长度”异常并终止。
这是上传发生的地方
SftpClient client = new SftpClient("rDir", 22000, "user", "password");
client.Connect();
client.BufferSize = 4 * 1024;
UploadDirectory(client, upFilePath, @"/");
client.Disconnect();
UploadDirectory 函数如下所示:
IEnumerable<FileSystemInfo> infos =
new DirectoryInfo(localPath).EnumerateFileSystemInfos();
foreach (FileSystemInfo info in infos)
{
if (info.Attributes.HasFlag(FileAttributes.Directory))
{
string subPath = remotePath + "/" + info.Name;
if (!client.Exists(subPath))
{
client.CreateDirectory(subPath);
}
UploadDirectory(client, info.FullName, remotePath + "/" + info.Name);
}
else
{
using (Stream fileStream = new FileStream(info.FullName, FileMode.Open))
{
client.UploadFile(fileStream, remotePath + "/" + info.Name);
}
}
}
该代码不会产生我所知道的超时,连接是稳定的,但仅在大约 10.000 个文件之后,它遇到了“错误的数据包长度”错误,我从它的外观上并不真正理解。
我是否需要更改 BufferSizes 或者我错过了一个关键的论点?
解决方案
推荐阅读
- qt - Qt mdi 窗口不接收鼠标事件
- python - 如何使用 Torch 框架从训练日志中绘制损失图
- php - 在 Craft 3 中从模板传递到自定义模板标签时,如何遍历标签字段?
- python - 使用 Oanda 问题实现外汇交易算法
- ttl - 如何在 clickhouse 表上使用 TTL?
- python - 如何在 C API 中创建 Python 字节对象
- javascript - 有问题的滑块 - 如何让我的滑块很好地适合里面的组件?
- c - 链表的这个空闲列表递归函数是做什么的?
- css - Flexbox 网格:如何并排显示 3 个项目,但垂直位置不同
- javascript - 重写jQuery函数来处理同一页面上的两个多级下拉菜单