59626


タイトルの件、System.Net.FtpWebRequestの記事が検索すると出てきますが、  
推奨していないとの記載もあります。

オープンソースを利用せずにFTPファイル送受信をC#で実現したい場合、  
どのような方法がありますでしょうか？

利用すべきAPI等の紹介でも構いません。

よろしくお願い致します。


CC BY-SA 4.0
2019-10-09T08:13:06.720
59594
2019-10-24T06:30:47.350
9228
question
c# ftp
.Net FrameworkでFTPでファイル送受信をする方法を教えてください。


.NETのAPI説明ページにこのように注記してあるのを見たものと思います。  
[FtpWebRequest Class](https://docs.microsoft.com/ja-
jp/dotnet/api/system.net.ftpwebrequest?view=netframework-4.8)

> **重要**  
>  新しい開発には`FtpWebRequest`クラスを使用しないことをお勧めします。
> の詳細および代替手段`FtpWebRequest`については、「WebRequest を GitHub で[
> **使用することはでき**](https://github.com/dotnet/platform-
> compat/blob/master/docs/DE0003.md)ません」を参照してください。

示されたリンクをたどると、代替案が出ています。  
[platform-compat/docs/DE0003.md](https://github.com/dotnet/platform-
compat/blob/master/docs/DE0003.md)

> # DE0003: WebRequest shouldn't be used
>
> **Motivation**  
>  `WebRequest`-based APIs are on life-support only (that is, only critical
> fixes, no new improvements, enhancements).  
>  **Recommendation**  
>  For `HttpWebRequest`: use
> [HttpClient](https://docs.microsoft.com/dotnet/api/system.net.http.httpclient)
> instead.  
>  For `FtpWebRequest`: use third party FTP client (e.g. from [this
> list](https://stackoverflow.com/questions/1371964/free-ftp-library)).

  * HTTPについてはこちら(日本語版)。  
[HttpClient Class](https://docs.microsoft.com/ja-
jp/dotnet/api/system.net.http.httpclient?view=netframework-4.8)  
こちらで`FTP:`スキームをURIに指定することが出来るならば、これでFTPができるのでしょうが、それは`FtpWebRequest`を使っているのと変わらない可能性があります。  
[WebClient Class](https://docs.microsoft.com/ja-
jp/dotnet/api/system.net.webclient?view=netframework-4.8)

> **重要**  
>  新しい開発にはWebClientクラスを使用しないことをお勧めします。
> 代わりに、[System.Net.Http.HttpClient](https://docs.microsoft.com/ja-
> jp/dotnet/api/system.net.http.httpclient?view=netframework-4.8)クラスを使用します。
>
> **注意**  
>  既定では、 `http:`.NET Framework は`ftp:`、`https:`、、、および`file:`スキーム識別子で始まる uri
> をサポートしています。

  * FTPについてはStackOverflowの記事が示されています。  
[Free FTP Library closed](https://stackoverflow.com/q/1371964/9014308)  
他にこんな記事もあります。  
[FTP client in .netcore](https://stackoverflow.com/q/40600312/9014308)  
紹介されているのはオープンソースでしょうしC#から制御できるとも限りませんが、参考に。

オープンソースにしたくないならば、「商業製品
FTPクライアント」といったキーワードで検索したものを調べてみるとかでしょうか。ただし、それらはC#から制御できる可能性は、もっと低くなりそうです。  
今検索したら、[商用FTPクライアントのWISE-FTPをリリース](https://www.wise-
ftp.jp/2019/08/01/%E5%95%86%E7%94%A8ftp%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AEwise-
ftp%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/) とかが上位にでてきました。

**追記**  
ちなみにGrapeCity(ComponentSource)やXLsoftとかのディーラーのサイトで検索したら、色々ありましたね。  
[ComponentSourceでFTPで検索すると多数](https://www.componentsource.co.jp/search/products/FTP)  
XLsoftは2つくらい？ [SocketTools .NET
エディション](https://www.xlsoft.com/jp/products/sockettool/dotnet.html), [SFTP
Drive](https://www.xlsoft.com/jp/products/nsoftware/sftpdrive.html)

* * *

**FTPが非推奨になったのは、以下のようにChromeの件とかが有名でしょう**  
[Chrome に「非セキュア」の烙印を押された
FTP](https://nakedsecurity.sophos.com/ja/2017/09/18/chrome-to-brand-ftp-as-
not-secure/)  
[プロなら絶対使わない、本当は怖い「FTP」 知らずに使っていませんか？](https://tajuso.com/ftp_no_encryption)  
[「FTP」まだ使ってる？
プロが使う「SCP」通信で、安全にファイル転送しよう](https://tajuso.com/ftp_scp_encryption)  
[第2回 ファイル転送はFTPじゃなくてSFTP？
SSHで安全にサーバへ入ろう](https://gihyo.jp/design/serial/01/server-knowledge/0002)  
[ベスト プラクティスと、FTP アダプターの推奨事項 - BizTalk Server](https://docs.microsoft.com/ja-
jp/biztalk/core/best-practices-and-recommendations-for-the-ftp-adapter)


CC BY-SA 4.0
2019-10-09T10:48:45.563
59600
2019-10-11T16:50:45.767
2019-10-11T16:50:45.767
26370
26370
59594
answer


kunifさんも書かれていますが改めて引用から

<https://docs.microsoft.com/en-
us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.8#remarks>

> We don't recommend that you use the `FtpWebRequest` class for new
> development. For more information and alternatives to `FtpWebRequest`, see
> [**WebRequest shouldn't be used**](https://github.com/dotnet/platform-
> compat/blob/master/docs/DE0003.md) on GitHub.

<https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md>

> `WebRequest`-based APIs are on life-support only (that is, only critical
> fixes, no new improvements, enhancements).

* * *

これは[Platform Compatibility Analyzer](https://github.com/dotnet/platform-
compat)によるもので

> This tool provides Roslyn analyzers that find usages of .NET Core & .NET
> Standard APIs that are problematic on specific platforms or are deprecated.

と説明されているように、.NET Coreおよび.NET Standardを対象としたものです。というわけで、使用している.NETごとに異なってきます。

* * *

### .NET Coreを使用している場合

「life-support only (that is, only critical fixes, no new improvements,
enhancements)」、つまり致命的な問題の修正のみを行い、一切の機能追加は行わないとのことです。であれば`FtpWebRequest`が今現在持っている機能で十分かどうかが判断の基準となります。

質問文には「オープンソースを利用せず」とありますが、.NET
Core自体がオープンソースですのであまり意味を持ちません。もちろん[FtpWebRequest.cs](https://github.com/dotnet/corefx/blob/master/src/System.Net.Requests/src/System/Net/FtpWebRequest.cs)もMITライセンスで公開されています。

### .NET Frameworkを使用している場合

Platform Compatibility Analyzerの対象ではないためあまり気にする必要がありません。

それよりも[.NET Core is the Future of
.NET](https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-
net/)で.NET Frameworkは4.8が最後のメジャーバージョンとなり、今後は機能追加されないことが宣言されています。つまり **.NET
Framewrokの全てのクラスが`FtpWebRequest`と同様の警告状態** となっています。.NET
Frameworkを使い続けるか、オープンソースの.NET Coreに移行するかの判断が必要です。


CC BY-SA 4.0
2019-10-10T22:14:40.623
59626
2019-10-10T22:14:40.623
4236
59594
answer


> オープンソースを利用せずにFTPファイル送受信をC#で実現したい場合、  
>  どのような方法がありますでしょうか？

C#コンパイラーのRoslynやJITコンパイラーのRyuJitをはじめ、C#はオープンソースの利用が事実上必須になっています。コンソールホストのconhost.exeですらOSSです。  
2019年現在、オープンソースを使用しないC#の環境というのはかなり無理があるのでは？実は使っているけれどもオープンスペースであることを認識していないだけ、という可能性が高い気がします…


CC BY-SA 4.0
2019-10-24T06:30:47.350
59935
2019-10-24T06:30:47.350
28957
59594
answer