首页 > 解决方案 > 数千个文件后通过 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 或者我错过了一个关键的论点?

标签: c#ssh.net

解决方案


推荐阅读