タイトル | : FtpWebRequestでファイル名に「#(シャープ)」が付く場合の対応 |
記事No | : 11323 |
投稿日 | : 2014/09/22(Mon) 13:24 |
投稿者 | : まつ |
VB2010 / Windows7 32bit / Framework4
お世話になります。
FtpWebRequestを使ってWindows7パソコンからSolarisサーバーにファイルを FTP送信するツールを制作しています。
ファイル名が AAA@BBB#CCC.DDD となっていて、FTP送信するとサーバーには AAA@BBB と言うファイル名でファイルが送信されてしまいます。 シャープ文字以降のファイル名が反映されません。 文字コードの指定の問題だとは想像しますがよく分かりません 元のファイル名のままで送信するためにはどうコードを書けば良いでしょうか?
一旦文字エンコードして送信後にリネームする方法は試しておりうまくいきます。 パソコン ファイル名変更 AAA@BBB#CCC.DDD → AAA%40BBB%23CCC.DDD サーバー FTP送信 AAA%40BBB%23CCC.DDD → AAA%40BBB%23CCC.DDD サーバー FTPリネーム AAA%40BBB%23CCC.DDD → AAA@BBB#CCC.DDD ただ、サーバー側で1時間おきにファイルをさらに転送するcronが動作しているため FTP送信中にエンコードしたファイル名のファイルも転送されそうです(未確認)。 なので元のファイル名のまま送信したいです。 なお、ffftpではそのままのファイル名で送信されます。 ファイル名はお客様の仕様のため変更出来ません。
コード 下記ホームページを参考にさせて頂き,ほぼそのままコードを使用しています。 http://dobon.net/vb/dotnet/internet/ftpwebrequest.html
Dim upFile As String = "D:Work\AAA@BBB#CCC.DDD" Dim u As New Uri("ftp://192.168.XXXX.XXXX/%2fwork/AAA@BBB#CCC.DDD")
Dim ftpReq As System.Net.FtpWebRequest = _ CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest) ftpReq.Credentials = New System.Net.NetworkCredential("username", "password") ftpReq.Method = System.Net.WebRequestMethods.Ftp.UploadFile ftpReq.KeepAlive = True ftpReq.UseBinary = True ftpReq.UsePassive = False ftpReq.Proxy = Nothing ftpReq.Timeout = 10000
Dim reqStrm As System.IO.Stream = ftpReq.GetRequestStream() Dim fs As New System.IO.FileStream( _ upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read) Dim buffer(1023) As Byte While True Dim readSize As Integer = fs.Read(buffer, 0, buffer.Length) If readSize = 0 Then Exit While End If reqStrm.Write(buffer, 0, readSize) End While fs.Close() reqStrm.Close()
Dim ftpRes As System.Net.FtpWebResponse = _ CType(ftpReq.GetResponse(), System.Net.FtpWebResponse) Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
ftpRes.Close()
|