使用Renci.SshNet从服务器目录下载每个文件

本文关键字:下载 文件 Renci SshNet 服务器 使用 | 更新日期: 2023-09-27 18:36:51

我已经为此工作了几天,似乎无法弄清楚为什么我无法从服务器下载目录中的每个文件。我成功地下载了第一个文件,然后在我收到拒绝访问错误后。

以下是我用来连接到服务器并开始下载过程的代码。

    public void downloadPaperwork()
    {
        // Setup Credentials and Server Information
        ConnectionInfo ConnNfo = new ConnectionInfo(ipAddress, port, serverName,
            new AuthenticationMethod[]{
            // Key Based Authentication (using keys in OpenSSH Format)
            new PrivateKeyAuthenticationMethod(serverName,new PrivateKeyFile[]{
                new PrivateKeyFile(keyFile,password)
            }),
            });
        using (var sftp = new SftpClient(ConnNfo))
        {
            sftp.Connect();
            sftp.ChangeDirectory("/var/www/html/invoices");
            List<SftpFile> invoices = sftp.ListDirectory(".").ToList();
            foreach (var file in invoices)
            {
                string filename = Path.Combine(Application.StartupPath + folder, file.Name);
                using (var fs = new FileStream(filename, FileMode.Create))
                {
                    if(!file.Name.Equals(".") && !file.Name.Equals(".."))
                    {
                        MessageBox.Show(file.Name);
                        sftp.DownloadFile(file.FullName, fs);
                        fs.Close();
                    }
                }
            }
            sftp.Disconnect();
        }
    }

以下是我在运行时收到的整个异常:

System.UnauthorizedAccessException: Access to the path 'C:'Users'*****'Documents'Visual Studio 2015'Projects'********'**********'bin'Debug'****'Invoices' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at *********.Form1.downloadPaperwork() in C:'Users'******'Documents'Visual Studio 2015'Projects'*********'*********'Secretary Form.cs:line 173
   at ********.Form1.Form1_Load(Object sender, EventArgs e) in C:'Users'*****'Documents'Visual Studio 2015'Projects'*******'*******'Secretary Form.cs:line 120
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

我尝试将文件添加到文件流中,但没有收到错误,但它不断替换一个文件,只给我留下目录中的最后一个文件。

任何帮助将不胜感激。提前谢谢。

使用Renci.SshNet从服务器目录下载每个文件

此错误是因为除了文件之外,您还获取目录。我只是将您的代码包装在 try 块中并catch UnauthorizedAccessException异常,并在您的 catch 块中放置一个continue