私はwpfアプリケーションを開発していて、異なるユーザー名でC#を使用してftpでディレクトリを作成したいと思っています。すでに存在する場合は、既存のディレクトリにファイルを保存します。
既存のディレクトリをチェックするロジックを正常に作成しましたが、新しいディレクトリを作成しているときに、実行時に例外が発生しました。
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
私はインターネットでさまざまな解決策を確認しましたが、ほとんどの人が書き込み権限によるものだと言っています。 ftpフォルダーに書き込み権限を割り当てていますが、まだ問題があります。助けてください?
これが私のコードです:
static void CreateFtpFolder(string source)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(source);
request.Credentials = new NetworkCredential(ftpusername, ftppassword);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.UsePassive = true;
request.UseBinary = false;
request.KeepAlive = false;
request.Proxy = null;
FtpWebResponse ftpResp = request.GetResponse() as FtpWebResponse;
}
FtpWebResponse
でエラーが発生しています。
あなたのコードはうまく見えます.......あなたも許可を割り当てたと言っています。唯一の問題は、問題の原因となっている間違った「ソース」を渡している可能性があることです。ソース文字列を確認してください。エラーが発生している可能性があります。
パスは次のようになります
WebRequest request = WebRequest.Create("ftp://Host.com/directory123");
このようなパスを指定している場合、ディレクトリは「directory12」という名前で作成されることを意味します
WebRequest request = WebRequest.Create("ftp://Host.com/directory123/directory1234");
これは、「 ftp://Host.com/directory123/ "がすでに存在しているはずであり、新しいディレクトリが「directory1234」という名前で作成されることを意味します。
問題がWindowsサーバー側のアクセス許可の問題であり、このFTPサーバーにアクセスできる場合は、アクセス許可を変更し、実際の物理ディレクトリで認証するユーザー名に「書き込み」アクセス許可を追加することで解決できる場合があります。 。
例えば' ftp:// Host / 'がサーバー上の 'c:\ inetpub\ftproot'を指している場合は、そのディレクトリのユーザーに '書き込み'権限を許可します。
私は自分のIIS 7 FTPサーバーをセットアップしていて、C#クライアントコードのこのような単純なスニペットを機能させるために1、2時間費やしたので、同様の人たちに貢献したいと思いました状況。
ディレクトリがすでに存在する場合は、そのエラーが発生します。かなりわかりにくいエラーメッセージです(笑)。 request.GetResponse()の呼び出しの周りにtrycatchを配置する必要があります
try
{
FtpWebResponse ftpResp = request.GetResponse() as FtpWebResponse;
}
catch ( Exception ex ) { /* ignore */ }