「お昼の放送」の思い出

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

A 回答 (2件)

相手の


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

この回答への補足

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

補足日時:2010/09/22 14:06
    • good
    • 0

hoge3を作ろうにもhoge2がないからどこに作っていいかわからんぞ~


と言ってきているような気がします。

フォルダをつくるという関数を用意しておいてそれを再帰呼び出しするようにすればよいのではないでしょうか?

これはPC内にフォルダを作る例ですが、

private void CreateDirectory(System.IO.DirectoryInfo d)
{
 if (d.Parent.Exists == false)
 {
  CreateDirectory(d.Parent);
 }
 d.Create();
}

こういう感じに書けばコード量は少なくて済みますね。
リクエストを大量に送りつけてしまうのは回避できませんが…

もしくはhoge3/hoge4/hoge5を内部にもっているフォルダhoge2をアップロードすれば
まとめて生成できるのではないでしょうか?
これは間違っている気がしますが…

この回答への補足

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

補足日時:2010/09/22 14:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!