---
# System prepended metadata

title: '`SSH.NET` を使用して ファイルのダウンロード・アップロードを行う `C#` 2024-01-01'
tags: [アップロード, SCP, ダウンロード, C#, SFTP, SSH, SSH.NET]

---

---
lang: ja-jp
breaks: true
---
# `SSH.NET` を使用して ファイルのダウンロード・アップロードを行う `C#` 2024-01-01

## csproj

```xml=
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="SSH.NET" Version="2023.0.1" />
  </ItemGroup>

</Project>
```

## cs

```csharp=
    /// <summary>
    /// 
    /// </summary>
    /// <param name="host"></param>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <param name="path"></param>
    /// <param name="fileName"></param>
    private static void SftpDownloadUpload(
        string host,
        string username,
        string password,
        string path,
        string fileName
        )
    {
        var connectionInfo = new ConnectionInfo(
            host: host,
            username: username,
            authenticationMethods: new PasswordAuthenticationMethod(
                username: username,
                password: password
                )
            );
        using (var client = new SftpClient(connectionInfo))
        {
            client.Connect();

            Console.WriteLine($"=================================================================");
            client.ListDirectory(".").ToList().ForEach(x => Console.WriteLine(x.Name));
            Console.WriteLine($"=================================================================");

            client.ChangeDirectory(path);

            Console.WriteLine($"=================================================================");
            client.ListDirectory(".").ToList().ForEach(x => Console.WriteLine(x.Name));
            Console.WriteLine($"=================================================================");

            // テンポラリディレクトリを作成
            string text = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            if (!Directory.Exists(text))
            {
                Directory.CreateDirectory(text);
            }

            // テンポラリディレクトリにダウンロードする。
            FileInfo fileinfoTarget = new FileInfo(
                Path.Combine(tempDirectryPath, fileName)
                );

            // バイナリモードでダウンロードする。
            using (
                FileStream stream = new FileStream(
                    fileinfoTarget.FullName,
                    FileMode.CreateNew,
                    FileAccess.Write
                    )
                )
            {
                client.DownloadFile(
                    fileinfoTarget.Name,
                    stream
                    );
            }

            // バイナリモードでアップロードする。
            using (
                FileStream stream = new(
                    fileinfoTarget.FullName,
                    FileMode.Open,
                    FileAccess.Read
                    )
                )
            {
                client.UploadFile(
                    stream,
                    fileinfoTarget.Name,
                    canOverride: true
                    );
            }

            // テンポラリディレクトリを削除する。
            if (Directory.Exists(tempDirectryPath))
            {
                Directory.Delete(tempDirectryPath, true);
            }

            client.Disconnect();
        }
    }

```

###### tags: `SSH.NET` `C#` `SFTP` `SCP` `ダウンロード` `アップロード` `SSH`
