- 題名: FTPサーバーのディレクトリ削除
- 日時: 2009/09/22 11:33:18
- ID: 25432
- この記事の返信元:
- (なし)
- この記事への返信:
- [25438] Re[1]: FTPサーバーのディレクトリ削除2009/09/24 3:39:32
- ツリーを表示
■No25439に返信(binさんの記事)
>>> リモート サーバーがエラーを返しました: (550)
RemoveDirectory 時に 550 (FtpStatusCode.ActionNotTakenFileUnavailable) が
発生する要因としては、下記のような物が考えられます。
・空っぽでは無いディレクトリを削除しようとした(空で無いと削除できない FTP サーバーの場合)。
・指定するパスを間違えていた。
・削除のための権限が不足している。
・サーバー側の異常(ディスクアクセスエラー等)。
> 最初にやった時もWebRequestMethods.Ftp.RemoveDirectoryを指定したのですが、
> 今回は下記のようなエラーがまた出ました。
前回は「リモート サーバーがエラーを返しました: (550)」という
エラーですよね。今回の実行にあたり、何を変更されましたか?
> WebExceptionはハンドルされませんでした。
> リモート名を解決できませんでした。: 'binam77.ie-yasu.com'
接続先は、'localhost' であったはずですよね。
>> Dim u As New Uri("ftp://localhost/test.txt")
それなのに、'binam77.ie-yasu.com' が参照されるのは妙ですね。
コードと環境のどちらに問題があるのか、見極める必要がありそうです。
> これで終わらせていただきたいと思います。
なお当方環境では、下記のコードで testDirectory ディレクトリの作成と破棄が行えました。
(接続先の FTP サーバーは、IIS 6.0 です)
'Imports System.Net
'Imports System.IO
Dim ftpReq As FtpWebRequest
Dim credentials As New NetworkCredential(username, password)
Console.WriteLine("ファイル一覧を取得 (NLST/ListDirectory)")
ftpReq = DirectCast(WebRequest.Create("ftp://server/"), FtpWebRequest)
ftpReq.Credentials = credentials
ftpReq.KeepAlive = True
ftpReq.Method = WebRequestMethods.Ftp.ListDirectory
Using ftpRes As FtpWebResponse = DirectCast(ftpReq.GetResponse(), FtpWebResponse)
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
Using response As New System.IO.StreamReader(ftpRes.GetResponseStream())
Console.WriteLine(response.ReadToEnd())
response.Close()
End Using
ftpRes.Close()
End Using
Console.WriteLine("ディレクトリ[testDirectory]を作成 (MKD/MakeDirectory)")
ftpReq = DirectCast(WebRequest.Create("ftp://server/testDirectory"), FtpWebRequest)
ftpReq.Credentials = credentials
ftpReq.KeepAlive = True
ftpReq.Method = WebRequestMethods.Ftp.MakeDirectory
Using ftpRes As FtpWebResponse = DirectCast(ftpReq.GetResponse(), FtpWebResponse)
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
ftpRes.Close()
End Using
Console.WriteLine("ディレクトリ[testDirectory]を削除 (RMD/RemoveDirectory)")
ftpReq = DirectCast(WebRequest.Create("ftp://server/testDirectory"), FtpWebRequest)
ftpReq.Credentials = credentials
ftpReq.KeepAlive = False
ftpReq.Method = WebRequestMethods.Ftp.RemoveDirectory
Using ftpRes As FtpWebResponse = DirectCast(ftpReq.GetResponse(), FtpWebResponse)
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
ftpRes.Close()
End Using
---------- FTP サーバー側の通信ログ ----------
#Fields: time cs-method cs-uri-stem sc-status sc-win32-status
14:09:25 [1]USER username 331 0
14:09:25 [1]PASS - 230 0
14:09:25 [1]CWD / 250 0
14:09:30 [1]MKD testDirectory 257 0
14:09:32 [1]RMD testDirectory 250 0
14:09:32 [1]QUIT - 250 0
----------------------------------------
分類:[.NET]
間違ってコンテンツの方に投稿しました。すみません。再投稿です。
本サイトのFTPサーバーのファイルやディレクトリ削除についてお教えください。
・ファイルについては正常に削除されましたが、ディレクトリについては
エラーとなりました。エラーメッセージは下記の通りです。
リモート サーバーがエラーを返しました: (550)
ファイルが使用できません (例: ファイルが見つからない、
ファイルへのアクセスがない)
ディレクトリを thum とした時、下記をどのように修正すればよいのか
お教えください。よろしくお願いします。
Dim u As New Uri("ftp://localhost/test.txt")
'FtpWebRequestの作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'ログインユーザー名とパスワードを設定
ftpReq.Credentials = New System.Net.NetworkCredential("username", "password")
'MethodにWebRequestMethods.Ftp.DeleteFile(DELE)を設定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.DeleteFile
'FtpWebResponseを取得
Dim ftpRes As System.Net.FtpWebResponse = _
CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)
'FTPサーバーから送信されたステータスを表示
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
'閉じる
ftpRes.Close()