|
.NET TIPS FTP時にディレクトリの存在を調べるには?[2.0、C#、VB]デジタルアドバンテージ 遠藤 孝信2008/07/03 |
![]() |
|
|
|
「TIPS:WebClientクラスでFTPによりファイル転送を行うには?」や「TIPS:WebRequest/WebResponseクラスでFTPによりファイル転送を行うには?」では、FTPによるファイルのアップロード方法について解説しているが、ローカルPC上のディレクトリ構成に従ってファイルをアップロードするような場合には、FTPサーバ上でのディレクトリの作成が必要となることがある。
例えば、FTP先のURLが、
ftp://servername/foo/bar/myfile.txt
(=FTPサーバservername上のディレクトリ/far/bar内のファイルmyfile.txt)
となるようにファイルをアップロードするには、FTPサーバ上に/fooディレクトリと、/foo/barディレクトリが存在していなければならず、もしなければ事前にディレクトリを作成しておく必要がある。本稿では、このようなURLにより指定されたFTPサーバ上のディレクトリの存在チェック方法について解説する。
ディレクトリ内のリスティング
FTPによるファイル操作はローカルPC上でのそれと比べると非常に限られているが、ファイルやディレクトリの確認に関しては、指定したディレクトリ内の一覧が可能だ。このためのコードは次のようになる。
| ||
| /fooディレクトリ内の一覧を取得するコード(上:C#、下:VB) |
このコードは、FTPサーバ上に/fooディレクトリが存在すれば一覧を文字列として取得できるが、もし/fooディレクトリが存在しなければ例外が発生する。従って、例外が発生するかどうかでディレクトリの存在をチェックすることができる。
ただし、サーバに接続できない、認証情報が正しくないなど、ほかにも例外が発生する要因は数多くあるため、ディレクトリのアクセスに関する例外であることを確認する必要がある。これについて次に述べる。
ディレクトリにアクセスできなかった場合の状態
ディレクトリにアクセスしようとしたが存在せずにアクセスできなかったというエラーは、FTPプロトコルにおけるエラーである。このようなエラーが発生した場合には、まず、WebExceptionオブジェクト(System.Net名前空間)のStatusプロパティに「WebExceptionStatus.ProtocolError」がセットされる。WebExceptionオブジェクトは、WebResponseクラス(System.Net名前空間)のGetResponseメソッドを呼び出したときにスローされる例外だ。
この場合には、FTPサーバとのアクセスには問題がないため、FTPサーバからの応答を取得することができる。この応答はWebExceptionオブジェクトのResponseプロパティから、FtpWebResponseオブジェクト(System.Net名前空間)として取得できる。そして、ディレクトリにアクセスできなかった場合には、応答のステータスを示すFtpWebResponseオブジェクトのStatusCodeプロパティが「FtpStatusCode.ActionNotTakenFileUnavailable」となる。
ディレクトリにアクセスして以上のような状態となった場合には、ディレクトリは存在しないと見なしてよいだろう。これらをコードにまとめると、以下のサンプル・プログラム中のdirExistsメソッドのようになる。
| |
| FTPでディレクトリの存在を調べるC#のサンプル・プログラム(ftpdirexists.cs) | |
| |
| FTPでディレクトリの存在を調べるVBのサンプル・プログラム(ftpdirexists.vb) | |
なお、ディレクトリを指すURL(上記のコードでは「ftp://servername/foo/」)の最後のスラッシュ(/)には注意が必要だ。/fooディレクトリが存在しない場合、この最後のスラッシュがないと、「foo」という名前のファイルについてアクセスすることになるためである(サーバによっては、fooというファイルが存在しなくても例外が発生しない)。![]()
| 利用可能バージョン:.NET Framework 2.0以降 カテゴリ:クラス・ライブラリ 処理対象:ネットワーク 使用ライブラリ:WebExceptionオブジェクト(System.Net名前空間) 使用ライブラリ:WebResponseクラス(System.Net名前空間) 使用ライブラリ:FtpWebResponseオブジェクト(System.Net名前空間) 関連TIPS:WebClientクラスでFTPによりファイル転送を行うには? 関連TIPS:WebRequest/WebResponseクラスでFTPによりファイル転送を行うには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


