##前提・実現したいこと
あるFTPサーバーのディレクトリ /aa/bb/cc に FtpWebRequest.GetResponse でアクセスすると
WebException が発生します。しかしコマンドプロンプトからFTPコマンドではアクセス可能です。
FtpWebRequest でアクセスを成功させたい、またはアクセスできない理由を明確にしたいです。
実行環境は Windows Server 2008 R2 です。
管理者は別会社の方で、私はFTPサーバー設定には全く詳しくないです。
##ソースコードとエラー
C#
1 void test(string user, string pass, string uri) 2 { 3 NetworkCredential credential = new NetworkCredential(user, pass); 4 FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(uri); 5 req.Proxy = null; 6 req.Credentials = this.credential; 7 req.Method = WebRequestMethods.Ftp.ListDirectory; 8 FtpWebResponse ftpRes = null; 9 try 10 { 11 ftpRes = (FtpWebResponse)req.GetResponse(); 12 } 13 catch (WebException e) 14 { 15 if (ftpRes == null) 16 { 17 Console.WriteLine("エラー"); 18 throw; 19 } 20 } 21 finally 22 { 23 if (ftpRes != null) 24 { 25 ftpRes.Close(); 26 } 27 } 28 }
例外発生時、ftpRes は null が入っています。例外メッセージは↓のようなものです。
「System.Net.WebException: リモート サーバーがエラーを返しました: (550) ファイルが使用できません (例: ファイルが見つからない、ファイルへのアクセスがない)」
##試したこと
uri = /aa/bb/cc へのアクセスは上記のように失敗しますが、1つ下のディレクトリ
uri = /aa/bb/cc/dd へのアクセス、アップロードは成功します。
このとき、user, pass は同じものを使っています。
また、コマンドプロンプトから ftp コマンドを使用すると(上記と同じ user, pass)、
/aa/bb/cc, aa/bb/cc/dd どちらのディレクトリにもアクセス、アップロードが成功します。
恐らくディレクトリのアクセス権限だと思い、コマンドプロンプトで ls -l を実行すると、
どちらも同様でした。
- /aa/bb/cc への ls -l 結果
drwxrwxr-x 469 user pass 125440 7月 18日 13:57 cc
- /aa/bb/cc/dd への ls -l 結果
drwxrwxr-x 2 user pass 512 4月 24日 2019年 dd
プログラムの修正で FtpWebRequest.GetResponse でアクセス成功させる方法があるでしょうか。
もしくは現状で失敗する理由を判断する方法があるでしょうか。
回答1件
あなたの回答
tips
プレビュー