DOBON.NET DOBON.NETプログラミング掲示板過去ログ

windowsAPIのFtpCreateDirectory

環境/言語:[C#、windowsXP、VS.NET2003]
分類:[.NET]

今、C#でwindowsAPIの勉強をしていて、
FTPサーバにディレクトリを作成する事に挑戦しているのですが、
InternetOpen、InternetConnectまでは何とか出来たと思っているのですが(Sessionが0ではなく5桁の整数が帰ってきています)、
FtpCreateDirectoryでエラーコード127が帰ってきます。
127って何だろうと調べたら、「ERROR_PROC_NOT_FOUND」と分かり?、
プロシージャが無いのかな?と読めたのですが、
ここでプロシージャって?という感じで意味が分からない状態です。
エラーを調べるには、「InternetGetLastResponseInfo」を使用するみたいなのですが、これの使い方も頑張って調べたものの良く分かりません。
InternetGetLastResponseInfoの使い方となぜ127が帰ってくるのか?
教えてください。
何でもいいので、アドバイスください。
そこからまた調べます(糸口がつかめない状態なので・・・)
--------------------------------------------------------
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern uint SetLastError(uint uiErrorCode);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern uint GetLastError();
[DllImport("kernel32", CharSet = CharSet.Auto)]
public static extern long CreateDirectory(string pathName, long security);

[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public static extern IntPtr InternetOpen(string strAppName, ulong ulAccessType, string strProxy, string strProxyBypass, ulong ulFlags);
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public static extern IntPtr InternetConnect(IntPtr ulSession, string strServer, uint ulPort, string strUser, string strPassword, uint ulService, uint ulFlags, uint ulContext);
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public static extern bool FtpPutFile(IntPtr ulSession, string strLocalFile, string strRemoteFile, ulong ulFlags, ulong ulContext);

private void button1_Click(object sender, System.EventArgs e)
{
hInternetSession = InternetOpen("UFIT", OPEN_TYPE_DIRECT, null, null, 0);

//戻り値は、確立された接続を識別するハンドル
hInternetConnection = InternetConnect(hInternetSession, "192.XXX.X.XXX", 21, "administrator", "XXX", 1, 0, 0);

//エラークリア
SetLastError(0);

FtpCreateDirectory(hInternetSession,"/test/A/");

//エラーコード取得
uint uintErrorValue = GetLastError();

//↑127と表示される

//ここから下もいろいろ書いていましたが、全然動かず・・・
//まずはディレクトリ作成
}
--------------------------------------------------------
> FtpCreateDirectory(hInternetSession,"/test/A/");

  因みに、FTPサーバーは、UNIX?Windows?
  権限が無いとディレクトリ作成できないのですが、正しくエラーコード
  が帰ってくるかは、FTPサーバーとの相性もあります。

  次に、ルートに既に『/test』と言うディレクトリがあるのでしょうか?
  無いところに、『/test/A』と『/A』のディレクトリは作成できません。
  『/test』を作ってから『/test/A』を作成する手順となります。

  逆に言いますと、『/test』は作れたが、『/test/A』が作れない。
  と言う状態なら、それもFTPサーバーが、UNIX系かWindows系かで差があり
  ます。『/test』を作成し、CD で、『/test』に移動して、そこに『/A』を
  作成しないといけないと言う場合もあります。

  ご参考までに・・・

以上。
アドバイスありがとうございます。
>   因みに、FTPサーバーは、UNIX?Windows?
>   権限が無いとディレクトリ作成できないのですが、正しくエラーコード
>   が帰ってくるかは、FTPサーバーとの相性もあります。

windowsです。
管理ツールのインターネットインフォメーションサービスでFTPサイトの箇所に
testを作りました。

>   次に、ルートに既に『/test』と言うディレクトリがあるのでしょうか?
>   無いところに、『/test/A』と『/A』のディレクトリは作成できません。
>   『/test』を作ってから『/test/A』を作成する手順となります。
>   逆に言いますと、『/test』は作れたが、『/test/A』が作れない。
>   と言う状態なら、それもFTPサーバーが、UNIX系かWindows系かで差があり
>   ます。『/test』を作成し、CD で、『/test』に移動して、そこに『/A』を
>   作成しないといけないと言う場合もあります。
>
移動してから、作成しないといけないという場合もあるという事ですか?
分かりました。
もう一度、やってみます。
しかし、「FtpSetCurrentDirectory」もうまくいかなかったような・・・

もう一度、見直してみます。
またアドバイスあればよろしくお願いします。
一応、途中経過です。
エラーコード127なのですが、127が出力されていたも、
処理自体はうまくいっていました。
エラーコード0以外はエラーだと思っていたので、成功していないと、
決め付けていたのですが、
私の知識不足だったみたいです。
しかし、
「http://ir9.jp/prog/ayu/win32err.htm」
ここのホームページなどを見ると、やっぱりエラーとなっているのですが、
なぜなのでしょうか?
知っている方がいましたらよろしくお願いします。
> 一応、途中経過です。
> エラーコード127なのですが、127が出力されていたも、
> 処理自体はうまくいっていました。

  FtpCreateCirectoryのリターン値は、Boolですが、Trueでしたか?
  それともFalseでしたか?

  falseの場合、GetlastErrorもしくは、InternetGetLastResponseInfoで
  取得したエラーコードが、127だったと言うことでしょうか?

> エラーコード0以外はエラーだと思っていたので、成功していないと、
> 決め付けていたのですが、
> 私の知識不足だったみたいです。

  必ずしも、ゼロ以外がエラーとは限らない場合もあります。
  API使うよりもソケット通信で、コマンド文字列をFTPサーバーに
  投げれば、その応答パケットでFTPサーバーがどのように動作してい
  かより詳しく解りますが・・・

  言い換えれば、TELNETのように文字列コマンドでやりとりが可能
  と言うことです。

> しかし、
> 「http://ir9.jp/prog/ayu/win32err.htm」
> ここのホームページなどを見ると、やっぱりエラーとなっているのですが、
> なぜなのでしょうか?
> 知っている方がいましたらよろしくお願いします。

  FTPサーバーのエラーレスポンスなら・・・
  http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/ftp-responsecode.html

  こちらの方が参考になるかと・・・
  もっと細かく出しているところもあると思いますので、探してみて下さい。

以上。
■No19413に返信(オショウさんの記事)
>>一応、途中経過です。
>>エラーコード127なのですが、127が出力されていたも、
>>処理自体はうまくいっていました。
>
>   FtpCreateCirectoryのリターン値は、Boolですが、Trueでしたか?
>   それともFalseでしたか?
>
>   falseの場合、GetlastErrorもしくは、InternetGetLastResponseInfoで
>   取得したエラーコードが、127だったと言うことでしょうか?
>
アドバイスありがとうございます。
trueでした。
trueという事は、エラーでは無いと言う事ですね。
やっと理解出来てきました。
一応、解決にします。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板