使用 SSH.NET 在进度栏中显示文件上传进度

2023-11-29

我想在我的设备上显示上传过程的进度ProgressBar,这是我的“上传”按钮的代码:

private void button2_Click(object sender, EventArgs e)
{
    int Port = int.Parse(textBox2.Text);
    string Host = textBox1.Text;
    string Username = textBox3.Text;
    string Password = textBox4.Text;
    string WorkingDirectory = textBox6.Text;
    string UploadDirectory = textBox5.Text;

    FileInfo FI = new FileInfo(UploadDirectory);
    string UploadFile = FI.FullName;
    Console.WriteLine(FI.Name);
    Console.WriteLine("UploadFile" + UploadFile);

    var Client = new SftpClient(Host, Port, Username, Password);
    Client.Connect();
    if (Client.IsConnected)
    {
        var FS = new FileStream(UploadFile, FileMode.Open);
        if (FS != null)
        {
            Client.UploadFile(FS, WorkingDirectory + FI.Name, null);
            Client.Disconnect();
            Client.Dispose();
            MessageBox.Show(
                "Upload complete", "Information", MessageBoxButtons.OK,
                MessageBoxIcon.Information);
        }
    }
}

您必须提供回调uploadCallback的论证SftpClient.UploadFile.

public void UploadFile(
    Stream input, string path, Action<ulong> uploadCallback = null)

当然,您必须在后台线程上上传或使用异步上传(SftpClient.BeginUploadFile).


使用后台线程(任务)的示例:

private void button1_Click(object sender, EventArgs e)
{
    // Run Upload on background thread
    Task.Run(() => Upload());
}

private void Upload()
{
    try
    {
        int Port = 22;
        string Host = "example.com";
        string Username = "username";
        string Password = "password";
        string RemotePath = "/remote/path/";
        string SourcePath = @"C:\local\path\";
        string FileName = "upload.txt";

        using (var stream = new FileStream(SourcePath + FileName, FileMode.Open))
        using (var client = new SftpClient(Host, Port, Username, Password))
        {
            client.Connect();
            // Set progress bar maximum on foreground thread
            int max = (int)stream.Length;
            progressBar1.Invoke(
                (MethodInvoker)delegate { progressBar1.Maximum = max; });
            // Upload with progress callback
            client.UploadFile(stream, RemotePath + FileName, UpdateProgresBar);
            MessageBox.Show("Upload complete");
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

private void UpdateProgresBar(ulong uploaded)
{
    // Update progress bar on foreground thread
    progressBar1.Invoke(
        (MethodInvoker)delegate { progressBar1.Value = (int)uploaded; });
}

enter image description here


For download see:
使用 SSH.NET 在进度栏中显示文件下载进度

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSH.NET 在进度栏中显示文件上传进度 的相关文章

  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • Mybatis ResultMap 是 HashMap

    我似乎找不到一种方法来获取结果地图作为地图 MySQL 是
  • 运行 dev_appserver.py 时如何访问远程数据存储?

    我正在尝试运行一个本地主机 Web 服务器 该服务器可以使用以下命令对远程数据存储进行远程 api 访问 remote api stub method ConfigureRemoteApiForOAuth 我一直在使用以下谷歌文档作为参考
  • Android 设备选择器 - 调试列

    当您使用多个 Android 设备从 Eclipse 进行调试时 您会看到 Android 设备选择器 对话框 您可以选择其中一个来部署应用程序 该对话框有一个 调试 列 该列到底意味着什么 我的一部手机说 是 而另一部则什么也没说 第二部
  • 如何使用和不使用 JavaScript 将数据发布到 CouchDB

    我有一个节目显示一个表单 其中包含从文档填充的字段 我想更改该字段中的值 然后保存更新的文档 我很难找到一个清晰 简洁的示例来说明如何执行此操作 说真的 仅仅完成这个例子就会为很多人带来奇迹 我将省略很多内容以使其简洁 安装 Couchap
  • 更新“订单”列 MySQL?

    更新 订单 列的最佳方法是什么 假设我有一个 id 列从 0 到 9 order 列从 0 到 9 目前 它在数据库中的形式为 0 0 1 1 2 2 等 我的 HTML 页面发布了它想要的新顺序 0 8 1 3 2 6 等 这是完全随机的
  • 根据用户定义的类型创建表

    假设我有一个用户定义的类型 CREATE OR REPLACE TYPE TEST TYPE AS OBJECT f1 varchar2 10 f2 number 5 现在 我想创建一个表来保存这些类型 我可以执行以下操作 create t
  • 通过网络 ODBC 访问 *.mdb

    我有一个关于带有 mdb 的 ODBC 如何工作的一般性问题 根据我的理解 如果我错了 请纠正我 无论我是否使用odbc 当访问存储在另一台计算机 即NAS 上的MS Access数据库 mdb 时 我的计算机首先需要在对其执行任何操作之前
  • XCode:设置多个 UITableView 列

    我还没有找到一个好的答案 我一定很笨 但是 我正在尝试在每行中设置一个带有图像和标签的表格视图 该图像将是一个指示图像 新的 正在进行的 已停止的 已完成的等 标签将是一个特定的问题名称 我可以正常设置一列的表视图 但我找不到任何设置表列数
  • MongoDB - 根据嵌套数组的字段值更新数组对象中的字段

    我正在尝试更新对象数组内的字段 其中嵌套数组中的字段等于一个值 我的目标是设定picture字段一个新的 url 其中value领域在valueList is oldRed 产品架构 variations id 1 picture http
  • 为输出文件指定日期和时间

    我正在研究ffmpeg屏幕捕获 我不希望它在启动时开始录制 所以我需要给输出视频文件一个每次开始录制时都不同的名称 我确实发现这个问题非常接近我需要的 所以我结束了在批处理文件中使用以下命令 echo off For f tokens 2
  • 画布仅在循环结束后重绘

    我在画布上循环绘图时遇到问题 我想要实现的是 在每个循环中 脚本等待几毫秒 然后在画布上绘制 用户实际上可以看到更改 然后重复循环 相反 它所做的是用户无法看到更改 直到 for 循环结束 但我发现 如果我显示一个警报窗口并且脚本等待用户响
  • Azure Web App 部署失败,无法读取未定义的属性“updateStartupCommandAndRuntimeStack”

    尝试将 dotnet core 5 应用程序从 Azure Devops 部署到 Azure Linux Web 应用程序 构建工作正常 但部署步骤总是失败并显示此消息 给出了一些上下文 2021 11 09T09 53 24 617247
  • 错误:找不到符号方法 findViewById(int)

    我在我的小应用程序中遇到了 WebView 问题 我的布局中有相关的 webview 和正确的信息 并且我有直接来自 Android 开发人员站点的示例代码 但它不适合我 错误围绕 findViewById R id webview met
  • 如何计算 TTF 字体中两个字形之间的间距?

    这是一个定义了a的图字体水平字形度量的几个术语 假设我有一句话 Foo 酒吧巴兹 如何获取单词 Foo 和 bar 之间的间距大小 以像素为单位 我想我总结一下 Foo 中 o 字素中的空白右侧填充 从advance the bearing
  • 操作对象文字:按特定顺序添加属性

    我正在开发一个在线创建 Nassi Shneiderman 图的工具 每个图的模型只是一个对象文字 存储具有无限可能的子项的所有内容 this then results in a view populated like the follow
  • 幂查询 M IN 运算符

    相当于 SQL 的什么INPower BI 的运算符 就像子句中一样 where Column1 IN Value1 Value2 Value3 我正在寻找 M 解决方案 不是 DAX 您可以使用List Contains功能 例如 Tab
  • Guice 在实例化对象后调用 init 方法

    是否可以告诉 Guice 在之后调用某个方法 即 init 实例化给定类型的对象 我在 EJB 3 和 Spring 中寻找类似于 PostConstruct 注释的功能 您只需添加 Inject注释到你的init 方法 实例化对象后它将自
  • C# Socket BeginReceive / EndReceive 捕获多条消息

    问题 当我做这样的事情时 for int i 0 i lt 100 i SendMessage sometSocket i ToString Thread Sleep 250 works with this doesn t work wit
  • 我的 UITabBarController 的 didSelectViewController 方法没有被调用?

    这是我的 app delegate m 的代码存根 它永远不会被调用 void tabBarController UITabBarController tabBarController didSelectViewController UIV
  • 使用 SSH.NET 在进度栏中显示文件上传进度

    我想在我的设备上显示上传过程的进度ProgressBar 这是我的 上传 按钮的代码 private void button2 Click object sender EventArgs e int Port int Parse textB