■4615 / inTopicNo.5) |
Re[3]: C#でFTP使用のファイル送受信(リモート) |
□投稿者/ moe (3回)-(2007/06/20(Wed) 17:20:53)
|
ぽぴ王子さま
返信ありがとうございます。 またフォローもありがとうございました。
> 英語だけど、この辺とか参考になるかな? > http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=95356&SiteID=1
参考にさせていただいたのですが、試行錯誤した結果まだうまくいっていません。
手順 @ローカルファイル作成 Aサーバファイル作成(これがうまくいきません。。。) Bローカルファイルからサーバファイルにアップロード Cローカルファイルを削除し、サーバファイルからローカルにダウンロード
下のソースでは書いてないのですが、手順Aのサーバにファイル作成がうまくいきません。 また下のソースではBとCの手順を逆にしています。 ダウンロードはうまくいくのに、アップロードがうまくいきません。 エラーは「リモート サーバーがエラーを返しました: (550) ファイルが使用できません (例: ファイルが見つからない、ファイルへのアクセスがない)」です。
//ftpサーバ指定 FTPサーバ名 = "ftp://" + サーバ名 + @"/ftptestfile.txt";
//ファイルをローカルに作成し、書き込み FTPファイル名 = Application.StartupPath + @"\ftptestfile.txt"; FileStream hStream = File.Create(FTPファイル名); hStream.Close(); StreamWriter writer = new StreamWriter(FTPファイル名); writer.WriteLine ("FTPConnectionTest\r\nFTPConnectionTest" + "\r\nFTPConnectionTest\r\nFTPConnectionTest\r\n"); writer.Close();
//リモートPCのファイル指定(FTPサーバ配下のファイルを処理) サーバテストファイル = @"//" + サーバ名 + @"/C/Inetpub/ftproot/ftptestfile.txt";
//FTPサーバのファイルからローカルにダウンロード WebRequest req = WebRequest.Create(FTPサーバ名); req.Credentials = new NetworkCredential(ユーザ名, パスワード); req.Method = WebRequestMethods.Ftp.DownloadFile; req.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse res = (FtpWebResponse)req.GetResponse(); Stream st = res.GetResponseStream(); FileStream fs = new FileStream(FTPファイル名, FileMode.Create); Byte[] buf = new Byte[1024]; int count = 0;
do { count = st.Read(buf, 0, buf.Length); fs.Write(buf, 0, count); } while (count != 0);
ftpsize = res.ContentLength; fs.Close(); st.Close(); res.Close();
//ローカルからFTPサーバにアップロード req = WebRequest.Create(サーバテストファイル); req.Credentials = new NetworkCredential(ユーザ名, パスワード); req.Method = WebRequestMethods.Ftp.UploadFile; req.Method = WebRequestMethods.Ftp.GetFileSize;
st = req.GetRequestStream(); fs = new FileStream(FTPサーバ名, FileMode.Open); buf = new Byte[1024]; count = 0;
do { count = fs.Read(buf, 0, buf.Length); st.Write(buf, 0, count); } while (count != 0);
//ファイルサイズ取得 ftpsize = (long)res.ContentLength;
fs.Close(); st.Close(); res.Close();
これはやはり私が使用しているサーバのセキュリティなどの問題なのでしょうか? それとも根本的に間違っているのでしょうか?
ヒントをいただけたらありがたいです。
よろしくお願いいたします。
|
|