お世話になります。
FTPサーバー上のファイルをダウンロードする処理を作っており、
まずFTPサーバー上のファイル一覧を取得したいと思います。
C#
1Uri u = new Uri("ftp://example0.co.jp/"); 2 3System.Net.FtpWebRequest ftpReq = (System.Net.FtpWebRequest) 4 System.Net.WebRequest.Create(u); 5ftpReq.Credentials = new System.Net.NetworkCredential("username", "password"); 6ftpReq.Method = System.Net.WebRequestMethods.Ftp.ListDirectory; 7ftpReq.KeepAlive = false; 8ftpReq.UsePassive = false; 9 10System.Net.FtpWebResponse ftpRes = 11 (System.Net.FtpWebResponse)ftpReq.GetResponse(); 12System.IO.StreamReader sr = 13 new System.IO.StreamReader(ftpRes.GetResponseStream()); 14string res = sr.ReadToEnd(); -- ★ 15Console.WriteLine(res); 16sr.Close(); 17 18Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription); 19ftpRes.Close();
というソースを記述し実行すると、
★のresに取得される値がファイル名ではなく、
指定したUriディレクトリの中身を表したHTML文になっています。
色々とFTPサーバーからのダウンロードについて参考になるサイトを探しましたが、これと同様なソースは記載されていますが
取得される値については特に情報が見つかりませんでした。
ファイル名のみを取得するにはどうしたらよいかご教授お願い致します。
そのURLに直にアクセスするとどうなるのでしょうか。
あと、それっぽく考えたドメインより例示ドメインのほうが良いです。
案外実在しますから。
エクスプローラーにURLを入力するとアクセスでき、中の階層を確認、操作することができます。
IEでURLを入力すると、
「The requested URL ftp://example.com/ retrieved failed
Command sent:
PASS hoge@example.com
Reply get:
User cannot log in, home directory inaccessible. 」
と表示されます。
表示されていたhoge@example.comのアドレス、ドメインについて調べたら、
導入しているWebセキュリティソフト関連のものということがわかり、FTP接続時のエラーについて調べたら
「ftp://example.com/」
にユーザー名とパスワードを足して
「ftp://ユーザー名:パスワード@example.com/」
と入力したら、IEからも接続できました。
例示ドメインはちゃんと存在する概念です。
https://ja.m.wikipedia.org/wiki/Example.com
http://equj65.net/tech/documentationip/
付け足してしまうともはや別物になるのでご注意を。
ただ、コード見た感じreadしてるだけのようですし、そのURLの出力がhtmlなら当然のように思いますが。。
ftpwebrequest get file names などをキーワードにググるといろいろヒットしますが役に立ちませんか? 例えば下記:
Retrieving list of FTP file names only, without additional details
https://stackoverflow.com/questions/31509170/retrieving-list-of-ftp-file-names-only-without-additional-details
FtpWebRequest のProxyプロパティの設定
ftpReq.Proxy = null; のコードを追記することで解決しました。
ファイル削除処理もこのコードが抜けていると、
「要求された FTP コマンドは、HTTP プロキシを使用しているときにはサポートされません。」
というエラーが出ており、追記することで正常にできました。
m.ts10806さん、 SurferOnWwwさん
ご回答ありがとうございました。
SurferOnWwwさんのリンクから解決に繋がりましたので
SurferOnWwwさんをベストアンサーにさせて頂きたいと思います。
ベストアンサーを付けて解決済みとしたいので回答をお願いします。
お手数ですが、ご自分で回答欄にどのように解決し方を書いて、それにマークを付けて解決済みにしていただくようお願いします。
ありがとうございました。
今後とも宜しくお願い致します。
ドメインの調整はお願いします。
現時点では存在しないようですが、今後取得されないとも限りませんし、持ち主に迷惑をかけることになります。
回答1件
あなたの回答
tips
プレビュー