• 締切済み

VC#のFtpWebRequestで多階層のディレクトリを作成すること

VC#のFtpWebRequestで多階層のディレクトリを作成することができません。 以下のようにすることで例えばftp://hogehoge.com/hoge1/というディレクトリがあったとしてそのhoge1の中にhoge2というディレクトリを作る事は出来ます。一階層のディレクトリまでなら作れることは確認しています。 Uri u = new Uri("ftp://hogehoge.com/hoge1/hoge2/") ; System.Net.FtpWebRequest ftpReq = (System.Net.FtpWebRequest)System.Net.WebRequest.Create(u); ftpReq.Credentials = new System.Net.NetworkCredential(ini[1], ini[2]); ftpReq.Method = System.Net.WebRequestMethods.Ftp.MakeDirectory; System.Net.FtpWebResponse ftpRes = (System.Net.FtpWebResponse)ftpReq.GetResponse(); ftpRes.Close(); しかし、ftp://hogehoge.com/hoge1/hoge2/hoge3/hoge4/hoge5/ ぐらいまでディレクトリを作ろうとした時、上のUriの値を ftp://hogehoge.com/hoge1/hoge2/hoge3/hoge4/hoge5/ にしてもディレクトリを作る事ができません。 ftp://hogehoge.com/hoge1/hoge2/ のように一階層なら上でも書いたとおり作成できますが ftp://hogehoge.com/hoge1/hoge2/hoge3/ と指定した場合、作成することができません。 場当たり的に上のコードを4,5回繰り返すことでhoge5までの作成は可能なことは可能でしたが、リクエストを大量に送りつけてしまい、ソースも長くなってしまうので他の方法を考えたいです。 他の方法でもかまいませんので何かいい方法はございませんでしょうか。 環境 VC# 2008 .netFramework 4.0 winXP SP3

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

相手の ・OS が分かっている ・ftpサーバと直接に話をする ・ftpサーバがシェルエスケープを実装している なら, 場合によってはコマンド一発で作ることもできるでしょうが, 今のままではどうにもならないと思います.

metonymy85
質問者

補足

直接のサーバ操作はできません。 よってシェルも弄れません。

  • cotae_bb
  • ベストアンサー率53% (51/95)
回答No.1

hoge3を作ろうにもhoge2がないからどこに作っていいかわからんぞ~ と言ってきているような気がします。 フォルダをつくるという関数を用意しておいてそれを再帰呼び出しするようにすればよいのではないでしょうか? これはPC内にフォルダを作る例ですが、 private void CreateDirectory(System.IO.DirectoryInfo d) {  if (d.Parent.Exists == false)  {   CreateDirectory(d.Parent);  }  d.Create(); } こういう感じに書けばコード量は少なくて済みますね。 リクエストを大量に送りつけてしまうのは回避できませんが… もしくはhoge3/hoge4/hoge5を内部にもっているフォルダhoge2をアップロードすれば まとめて生成できるのではないでしょうか? これは間違っている気がしますが…

metonymy85
質問者

補足

FTPでディレクトリをアップロードするというのは可能なのでしょうか

関連するQ&A